MongoDB基础查询

MongoDB 查询文档使用 find() 方法。

find() 方法以非结构化的方式来显示所有文档。

语法格式:

db.collection.find(query, projection)
query格式 :{ field1: <value>, field2: <value> ... }
  • query :可选,使用查询操作符指定查询条件,相当于读取文档筛选文档的条件。若要返回集合中的所有文档,请省略此参数或传递一个空文档({})。
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

常用操作符

1. 比较查询操作符

$eq:匹配等于指定值的值。

$ne:匹配不等于指定值的所有值。

$in:匹配数组中指定的任何值。

$nin:不匹配数组中指定的值。

$gt:匹配大于指定值的值。

$gte:匹配大于或等于指定值的值。

$lt:匹配小于指定值的值。

$lte:匹配小于或等于指定值的值。

2. 逻辑查询操作符

$and:将查询子句与逻辑连接,并返回与这两个子句条件匹配的所有文档,相当于匹配多个筛选条件全部成立的文档。

$nor:用逻辑NOR连接查询子句,返回所有不能匹配这两个子句的文档,相当于返回多个筛选条件全部不成立的文档。

$or:用逻辑连接查询子句,或返回与任一子句条件匹配的所有文档,相当于返回至少一个筛选条件成立的文档

$not:反转查询表达式的效果,并返回与查询表达式不匹配的文档,相当于返回条件不成立的文档。

3. 元素查询操作符

$exists:匹配具有指定字段的文档。

$type:如果字段属于指定类型,则选择文档。

4. 评估查询操作符

$expr:允许在查询语言中使用聚合表达式。

$regex:选择值匹配指定正则表达式的文档。

5. 数组查询操作符

$all:匹配包含查询中指定的所有元素的数组,相当于返回数组字段中包含所有查询值的文档。

$elemMatch:如果数组字段中的元素匹配所有指定的$elemMatch条件,则选择文档,相当于匹配数组字段中至少存在一个值满足筛选条件的文档

$size:如果数组字段是指定大小,则选择文档。

 查询单个对象示例

初始化数据:

db.findExample.insertMany([

{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A",tags: ["blank", "red"], dim_cm: [ 14, 21 ],instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },

{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A", tags: ["red", "blank"], dim_cm: [ 14, 21 ] , instock: [ { warehouse: "C", qty: 5 } ] },

{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D", tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ], instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ]},

{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" , tags: ["blank", "red"], dim_cm: [ 22.85, 30 ], instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },

{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" , tags: ["blue"], dim_cm: [ 10, 15.25 ], instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }

]);

查询全部:

db.findExample.find({})

 根据某个字段相等查询: 

db.findExample.find({status:"D"})

根据某个字段in查询:

db.findExample.find({ status: { $in: [ "A", "D" ] } } )

 根据多个字段查询(隐式and): 

【注意,MongoDB 查询过程中,在没有其它限定条件,比如$or的情况下,两个相邻的条件自动的被翻译为 AND 操作,相当于隐式AND操作】

db.findExample.find( { status: "A", qty: { $lt: 30 } } )

根据多个字段查询(显式and):

db.findExample.find( { $and: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

根据多个字段or查询:

db.findExample.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

隐式and加or查询:

db.findExample.find( {

status: "A",

$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]

} )

查询(单个)嵌入式文档

1. 内嵌文档完整匹配

【注意:匹配嵌入式文档的字段名的顺序不能颠倒】

db.findExample.find( { size: { h: 14, w: 21, uom: "cm" } })

2. 在内嵌文档字段上使用相等查询

db.findExample.find( { "size.uom": "in" } )

查询(多个)嵌入式文档

1. 内嵌文档完整匹配

【注意:只要多个内嵌 documents 中只要有一个完全匹配了上述的查询条件,则将会返回该 document,字段名的顺序不能乱,元素不能少】

db.findExample.find( { "instock": { warehouse: "A", qty: 5 } } )

2. 根据对象坐标定位元素查询

db.findExample.find( { 'instock.0.qty': { $lte: 10 } } )

3. 根据多个过滤条件以OR的方式进行查询

db.findExample.find( { "instock.qty": 5, "instock.warehouse": "A" } )

4. 根据多个过滤条件以AND的方式进行查询

db.findExample.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值