首页 > mongodb > basic > 12.MongoDb查询基本操作详解

12.MongoDb查询基本操作详解

Mongodb提供了查询文档的方法db.collection.find().

例如:

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 mongodb查询一个集合中全部数据

输入:

db.inventory.find( {} )

这个对应的SQL语句为

SELECT * FROM inventory

2 mongodb指定条件查询

MongoDB使用<field>:<value>表达式来指定查询条件.

{ <field1>: <value1>, ... }

以下例子为从inventory集合中查找statusD的全部文档.

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

这个对应SQL表达式

SELECT * FROM inventory WHERE status = "D"

3 mongodb通过条件操作符来设置查询条件

MongoDB操作符列表: query operators

操作符使用方式:

{ <field1>: { <operator1>: <value1> }, ... }

以下例子为从inventory集合中查找statusAD的全部文档.

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

另外也可以使用$or操作符来实现以上操作. 当执行相等性检查时, 采用$in而不要用$or(下文OR条件查询$or的应用场景示例.).

等同于SQL语句:

SELECT * FROM inventory WHERE status in ("A", "D")

4 mongodb AND条件查询

MongoDB可以同时多个条件, 查询同时满足这些条件的文档.

以下为查询inventory集合中同时满足statusA并且qty小于30的全部文档.

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

等同于SQL语句:

SELECT * FROM inventory WHERE status = "A" AND qty < 30

5 mongodb OR条件查询

MongoDB中可以将多个查询条件放在数组中, 通过$or操作符, 来查询满足其中至少一个条件的文档.

以下为查询inventory集合中同时满足statusA或者qty小于30的全部文档.

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

等同于SQL语句:

SELECT * FROM inventory WHERE status = "A" OR qty < 30

6 mongodb AND和OR联合查询

以下为查询inventory集合中同时满足statusA的, 并且满足qty小于30或者item数据以p开头的全部文档.

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操作符可以做字符串模式匹配.

7 mongodb查询行为

7.1 Cursor

db.collection.find()方法返回一个cursor执行匹配的文档.

7.2 读分离

MongoDB3.2新特性

For reads to replica sets and replica set shards, read concern allows clients to choose a level of isolation for their reads. For more information, see Read Concern.

8 其他查询方法

  • db.collection.findOne
  • In aggregation pipeline, the $match pipeline stage provides access to MongoDB queries.

db.collection.findOne()方法等同于db.collection.find().limit(1).

9 参考文章

https://docs.mongodb.com/manual/tutorial/query-documents/

10 相关文章

MongoDB中文文档

转载请保留原文链接.