媒介:运用的可视化东西是 Studio 3T,官网-->https://studio3t.com/
版本号:MongoDB shell version v3.4.2
怎样运用:https://blog.csdn.net/weixin_...
看点:重点看操纵符那块。
怎样查找:在此页面按 ctrl+F 输入关键字查找
一、经常运用Query
为轻易操纵,在插进去原数据前,先删除一切文档(在项目中请郑重操纵!):
db.getCollection("inventory").deleteMany({})
0、检察一切文档
db.getCollection("inventory").find({})
1、对象查找
1.1、原数据
db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" }, { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" }, { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" }, { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" }, { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" } ]);
1.2、查找 size.h 即是 14,size.w 即是 21,size.uom 即是 cm 的文档
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
1.3、查找 size.uom 即是 in 的文档
db.inventory.find( { "size.uom": "in" } )
注重:当查找单个对象属性时,务必加上引号!
1.4、查找并返回对象里的指定字段
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
1.5、查找并过滤对象里的指定字段
db.inventory.find( { status: "A" }, { "size.uom": 0 } )
2、数组查找
2.1、原数据
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] }, { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] }, { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] }, { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] }, { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] } ]);
2.2、查找 tags=["red", "blank"] 的文档
db.inventory.find( { tags: ["red", "blank"] } )
注重:不是包括关联,即 tags: ["red", "blank", "plain"] 是不包括在内的
2.3、查找 tags 包括 red 的文档
db.inventory.find( { tags: "red" } )
注重:不能这么写 db.inventory.find( { tags: ["red"] } ),如许就示意查找 tags 是 red 的文档
3、数组中包括对象的查找
3.1、原数据
db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }, { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] }, { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] }, { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] } ]);
3.2、查找数组中有一个对象相符前提的(不是包括),只需数组中有一个对象相符前提就返回悉数数组
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
要严厉依据字段的递次来,假如换取字段递次会 找 不 到
,以下:
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
3.3、查找数组中的元素对象,有一个元素对象的qty=5,或许该对象(或许是其他元素对象)的warehouse=A
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
3.4、查找数组中的对象,并返回对象的某个属性
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
4、一般查找
4.1、原数据
db.inventory.insertMany( [ { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] }, { item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] }, { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] }, { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] }, { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] } ]);
4.2、查询并返回指定字段
在 status=A 的前提下,返回 _id,item,status 字段
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
效果:
{ "_id" : ObjectId("5c91cd53e98d5972748780e1"), "item" : "journal", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e2"), "item" : "notebook", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e5"), "item" : "postcard", "status" : "A"}
4.3、由 4.2 可知,_id 是自动带着的,能够去掉,以下
查询不带(去掉) id :
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
注重:除了 id 能够在过滤掉的同时,还去保存其他字段外,其他字段不能在 0 的同时,还写 1
如:
db.inventory.find( { status: "A" }, { item: 1, status: 0 } )
会报错
4.4、消除特定字段,返回其他字段
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
5、查找 null 或不存在的 键
5.1、原数据
db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 } ])
5.2、查找 item 为 null 的文档,或许不包括 item 的文档
db.inventory.find( { item: null } )
二、操纵符
1、$lt less than 小于
1.1、原数据
db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" }, { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" }, { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" }, { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" }, { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" } ]);
1.2、查找 "size.h" 小于 15 的文档鸠合
db.inventory.find( { "size.h": { $lt: 15 } } )
1.3、$lt 与 AND 联用
查找 size.h 小于 15,而且 size.uom 是 in ,而且 status 是 D 的文档
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
2、$lte less than equal 小于即是
2.1、原数据
db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }, { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] }, { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] }, { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] } ]);
2.2、查找 instock.qty 小于即是 20 的文档,只需数组中有一个对象相符前提就返回悉数数组
db.inventory.find( { 'instock.qty': { $lte: 20 } } )
3、$gt greater than 大于
3.1、原数据
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] }, { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] }, { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] }, { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] }, { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] } ]);
3.2、查找 dim_cm 大于 25 的文档
db.inventory.find( { dim_cm: { $gt: 25 } } )
注重:只需包括大于 25 的元素的数组,都是相符前提的
3.3、查找 dim_cm 大于 15,或小于 20,或既大于 15,又小于 20 的文档
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
3.4、查找 dim_cm 既大于 22,又小于 30 的文档(是推断数组的某一个元素是不是是大于22,且小于30的,而不是推断数组的一切元素)
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
3.5、依据数组位置查找
查找 dim_cm 的第二个元素 大于 25 的文档
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
4、$size 依据数组长度查找
查找 tags 长度是 3 的文档
db.inventory.find( { "tags": { $size: 3 } } )
5、$gte 大于即是
5.1、原数据
db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }, { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] }, { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] }, { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] } ]);
5.2、查找数组的第一个元素(对象)的qty 大于即是 20 的文档鸠合
db.inventory.find( { 'instock.0.qty': { $gte: 20 } } )
6、$elemMatch 对象的属性婚配
6.1、在数组中查找相符 qty=5, warehouse="A" 的对象,并返回该文档鸠合
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
6.2、在数组中查找相符 qty 大于 10 而且小于即是 20 的文档鸠合
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
假如不运用 $elemMatch 的话,就示意 qty 大于 10 或许
小于即是 20,官方文档意义是,不在数组的某一个元素找 既满足前提 A 又满足前提 B 的 qty,而是在数组的一切元素上找,满足前提 A 或满足前提 B 的 qty
db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } )
7、$slice 返回数组特定位置的元素
7.1、原数据
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] }, { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] }, { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] }, { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] }, { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] } ]);
7.2、查找并返回 tags 数组的末了一个元素
db.inventory.find( { item: "journal" }, { item: 1, qty: 0, tags: { $slice: -1 } } )
效果:
{ "_id" : ObjectId("5c91dce5e98d5972748780e6"), "item" : "journal", "tags" : [ "red" ] }
8、$type 返回指定范例的元素
8.1、原数据
db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 } ])
8.2、返回 null 范例的数据
db.inventory.find( { item : { $type: 10 } } )
范例以下:
细致文档请看:https://docs.mongodb.com/manu...
9、$exists 返回存在/不存在的键
查找不存在 item 键的数据
db.inventory.find( { item : { $exists: false } } )
10、$all 包括
10.1、原数据
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] }, { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] }, { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] }, { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] }, { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] } ]);
10.2、查找 tags 数组包括 ["red", "blank"] 的文档
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
综上:
数组用的:$all
、$size
、$slice
对象用的:$elemMatch
Query查询的细致文档请看:https://docs.mongodb.com/manu...
Operator的细致文档请看:https://docs.mongodb.com/manu...
本篇文章到这里就已悉数完毕了,更多其他精彩内容能够关注ki4网的mongodb视频教程栏目!
以上就是MongoDB的经常运用Query操纵的引见(附代码)的细致内容,更多请关注ki4网别的相干文章!