例子
准备数据
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" }
]);
查询
- 查询集合中的所有文档
> db.inventory.find( {} )
> db.inventory.find( )
相当于SQL中的
SELECT * FROM inventory
更多信息请参考:find()
- 指定=条件
例子:从集合中选择状态为“d”的所有文档:
db.inventory.find( { status: "D" } )
相当于SQL中的
SELECT * FROM inventory WHERE status = "D"
- 使用查询运算符指定条件
比如
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
相当于SQL中的
SELECT * FROM inventory WHERE status in ("A", "D")
备注:$or与 $in有相同的作用,但是请尽量使用 $in
- 指定and条件
复合查询可以为集合文档中的多个字段指定条件
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
相当于SQL中的
SELECT * FROM inventory WHERE status = "A" AND qty < 30
备注:$lt 小于运算符 less then
- 指定or条件
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
相当于SQL中的
SELECT * FROM inventory WHERE status = "A" OR qty < 30
使用比较运算符的查询受类型括号限制。
- 同时指定and和or条件
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
相当于SQL中的
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
mongodb支持正则表达式$ regex查询来执行字符串模式匹配。
查询嵌入/嵌套文档
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } ) //要求条件完全匹配,包括顺序
用.标记可以访问嵌套文档中的某个字段“field.nestedField”
> db.inventory.find( { "size.uom": "in" } ) //查询inventory集合中size嵌套字段uom值为in的文档
> db.inventory.find( {"size.h":{$lt:15}}) //查询inventory集合中size嵌套字段h值比15小的文档
- 和条件
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } ) //查询inventory集合中size嵌套字段h值比15小,uom值为in, status="D"的文档
其他查询教程
行为
光标
- db.collection.find()方法将光标返回到匹配的文档。
读取隔离
3.2新增功能
对于对副本集和副本集碎片的读取,读取关注点允许客户机为其读取选择一个隔离级别。具体请参考读
其他方法
原文:https://docs.mongodb.com/manual/tutorial/query-documents/
https://docs.mongodb.com/manual/tutorial/query-embedded-documents/