百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MongoDB的常用Query操纵的介绍(附代码)
分享文章到:

MongoDB的常用Query操纵的介绍(附代码)

发布时间:08/01 来源:未知 浏览: 关键词:
?本篇文章给大家带来的内容是对于MongoDB的常用Query操纵的介绍(附代码),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。 本篇文章给大家带来的内容是对于MongoDB的常用Query操纵的介绍(附代码),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

前言:运用的可视化工具是 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 } )

会报错

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 } } )

类型如下:

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...

本篇文章到这里就已经全部完毕了,更多其他出色内容可以关注百分百源码网的mongodb视频教程栏目!

以上就是MongoDB的常用Query操纵的介绍(附代码)的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板