查询文档

这个页面提供了使用mongo shell中的db.collection.find()方法的查询操作示例。此页上的示例使用inventory集合。要填充inventory集合,请运行以下操作:

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" }
]);

选择集合中的所有文档

要选择集合中的所有文档,请将空文档作为查询过滤器参数传递给find方法。 查询过滤器参数确定选择条件:

db.inventory.find( {} )

此操作对应于以下SQL语句:

SELECT * FROM inventory

有关该方法的语法的更多信息,请参见find()

指定平等条件

要指定相等条件,请在查询筛选文档使用<field>:<value>表达式:

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

下面的示例从inventory中选择状态等于" D"的所有文档:

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

此操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status = "D"

使用查询运算符指定条件

查询过滤器文档可以使用查询运算符以以下形式指定条件:

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

下面的例子从状态等于" A"" D"inventory集合中检索所有文档:

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

[success] Note

尽管可以使用$or 操作符表示此查询,但在对同一字段执行相等性检查时,请使用 $in操作符而不是$or操作符。

该操作对应于以下SQL语句:

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

有关MongoDB查询运算符的完整列表,请参阅查询和投影运算符文档

指定和条件

复合查询可以为集合文档中的多个字段指定条件。逻辑和连词隐式地连接复合查询的子句,以便查询在集合中选择符合所有条件的文档。

下面的示例 inventory 状态为"A"且数量小于($lt) 30的库存集合中的所有文档:

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

该操作对应于以下SQL语句:

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

有关其他MongoDB比较运算符,请参阅比较运算符

指定或条件

使用$or操作符,可以指定一个复合查询,用逻辑OR连词连接每个子句,以便查询在集合中选择至少匹配一个条件的文档。

下面的示例retrieve状态为“A”qty小于($lt)30的集合中的所有文档:

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

该操作对应于以下SQL语句:

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

[success] Note

使用比较运算符的查询需要使用括号类型

指定和以及或条件

在下面的例子中,复合查询文档选择状态为“A”qty小于($lt) 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%")

[success] Note

MongoDB支持正则表达式$regex查询来执行字符串模式匹配。

附加查询教程

有关其他查询示例,请参见:

行为

游标

db.collection.find()方法将游标 返回到匹配的文档。

读取隔离

3.2版中的新功能

对于复制集 和复制集分片的读取,读取关注允许客户端为其读取选择隔离级别。 有关更多信息,请参见阅读关注。

附加方法

以下方法也可以从集合中读取文档:

[success] Note

db.collection.findOne()方法还执行读取操作以返回单个文档。在内部,db.collection.findOne()方法是 db.collection.find() 方法,限制为1。

译者:杨帅

校对:杨帅