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

    1. db.inventory.insertMany([
    2. { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
    3. { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
    4. { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
    5. { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
    6. { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
    7. ]);

    选择集合中的所有文档

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

    1. db.inventory.find( {} )

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

    1. SELECT * FROM inventory

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

    指定平等条件

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

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

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

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

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

    1. SELECT * FROM inventory WHERE status = "D"

    使用查询运算符指定条件

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

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

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

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

    [success] Note

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

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

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

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

    指定和条件

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

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

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

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

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

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

    指定或条件

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

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

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

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

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

    [success] Note

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

    指定和以及或条件

    在下面的例子中,复合查询文档选择状态为“A”qty小于($lt) 30或item以字符p开头的集合中的所有文档:

    1. db.inventory.find( {
    2. status: "A",
    3. $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
    4. } )

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

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

    译者:杨帅

    校对:杨帅

    参见

    原文 - Query Documents