参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.find()
db.collection.
find
(查询,投影)¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
在集合或视图中选择文档,然后将光标返回 到所选文档。
参数 | 类型 | 描述 |
---|---|---|
query |
文献 | 可选的。使用查询运算符指定选择过滤器。要返回集合中的所有文档,请忽略此参数或传递一个空文档({} )。 |
projection |
文献 | 可选的。指定要在与查询过滤器匹配的文档中返回的字段。要返回匹配文档中的所有字段,请省略此参数。有关详细信息,请参见投影。 |
返回值: | 一个光标匹配的文件query
标准。当该find() 方法“返回文档”时,该方法实际上是将光标返回到文档。 |
---|
该projection
参数确定在匹配文档中返回哪些字段。该projection
参数采用以下格式的文档:
该<value>
可以是任何如下:
一个projection
不能包含两个包含和排除的规范,除了排除_id
领域。在明确包含字段的投影中,该_id
字段是您可以明确排除的唯一字段。
db.collection.find()
在mongo
shell中执行将自动迭代光标以显示最多前20个文档。键入it
以继续迭代。
要使用驱动程序访问返回的文档,请使用适用于驱动程序语言的游标处理机制。
也可以看看
要指定读关心的
db.collection.find()
,使用cursor.readConcern()
方法。
为了进行比较,MongoDB将某些数据类型视为等效。例如,数字类型在比较之前先进行转换。但是,对于大多数数据类型, 比较运算符仅对目标字段的BSON类型与查询操作数的类型匹配的文档执行比较 。考虑以下集合:
以下查询用于$gt
返回值qty
大于的文档4
。
该查询返回以下文档:
_id
等于的文档"avocados"
不会返回,因为其qty
值是类型,string
而
$gt
操作数是integer
。
_id
等于的文档"oranges"
未返回,因为其qty
值的类型为object
。
注意
要在集合中强制使用数据类型,请使用 Schema Validation。
版本4.0中的新功能。
对于在会话内创建的游标,不能getMore
在会话外调用
。
同样,对于在会话外部创建的游标,不能getMore
在会话内部调用
。
从MongoDB 3.6开始,MongoDB驱动程序和mongo
外壳程序将所有操作与服务器会话相关联,但未确认的写操作除外。对于未与会话明确关联的操作(即使用Mongo.startSession()
),MongoDB驱动程序和mongo
外壳程序会创建一个隐式会话并将其与该操作相关联。
如果会话空闲时间超过30分钟,则MongoDB服务器会将会话标记为已过期,并可以随时关闭它。当MongoDB服务器关闭会话时,它还会终止所有正在进行的操作并打开与该会话关联的游标。这包括配置了30分钟noCursorTimeout
或maxTimeMS
30分钟以上的光标。
对于可能闲置超过30分钟的操作,请使用将该操作与显式会话相关联,
Session.startSession()
并使用该refreshSessions
命令定期刷新该会话。请参阅以获取更多信息。Session Idle
Timeout
db.collection.find()
可以在多文档交易中使用。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
从MongoDB 4.2开始,如果发出db.collection.find()
断开连接的客户端在操作完成之前断开连接,则MongoDB将标记db.collection.find()
为终止(即killOp
在操作上)。
本节中的示例使用来自bios集合的文档,这些文档通常具有以下格式:
要创建并填充bios
集合,请参见
bios示例集合。
要查找与一组选择标准匹配的文档,请find()
使用<criteria>
参数进行调用
。
MongoDB提供了各种查询运算符来指定条件。
以下操作使用$in
运算符返回等于
或的bios集合中的文档:_id
5
ObjectId("507c35dd8fada716c89d0013")
以下操作使用$gt
运算符从bios
集合中返回birth
大于的所有文档:new Date('1950-01-01')
以下操作使用$regex
运算符返回bios集合中的文档,其中name.last
字段以字母N
(或为)开头"LIKE N%"
有关查询运算符的列表,请参见查询选择器。
组合比较运算符以指定字段的范围。以下操作从bios收集文档返回,其中birth
介于和之间
(不包括):new Date('1940-01-01')
new Date('1960-01-01')
有关查询运算符的列表,请参见查询选择器。
下面的操作返回所有从文件BIOS集合,其中birth
场和
字段不存在:greater than
new Date('1950-01-01')
death
有关查询运算符的列表,请参见查询选择器。
以下示例查询bios集合中的name
嵌入式字段
。
下列操作返回文档BIOS收集在嵌入文件name
是
完全相同 ,包括订单:{ first: "Yukihiro", last: "Matsumoto" }
该name
字段必须与嵌入文档完全匹配。该查询
与具有以下字段的文档不匹配name
:
以下操作返回bios集合中的文档,其中嵌入的文档name
包含first
具有值"Yukihiro"
的字段last
和具有值的字段
"Matsumoto"
。该查询使用点表示法来访问嵌入式文档中的字段:
该查询将匹配文档,其中该name
字段包含嵌入的文档,该文档的字段first
具有值,"Yukihiro"
而字段则last
具有"Matsumoto"
。例如,查询将使文档与具有name
以下任一值的字段进行匹配:
有关更多信息和示例,另请参见对嵌入/嵌套文档的查询。