On this page
find
在本页面
Definition
find
- 3.2 版中的新功能。
执行查询并返回第一批结果和游标 ID,Client 端可以从中构造游标。
Tip
您可以使用mongo shell 中提供的db.collection.find()帮助程序或驱动程序中的等效帮助程序,而不是直接运行find命令。
Syntax
find命令具有以下语法:
db.runCommand(
{
"find": <string>,
"filter": <document>,
"sort": <document>,
"projection": <document>,
"hint": <document or string>,
"skip": <int>,
"limit": <int>,
"batchSize": <int>,
"singleBatch": <bool>,
"comment": <string>,
"maxScan": <int>,
"maxTimeMS": <int>,
"readConcern": <document>,
"max": <document>,
"min": <document>,
"returnKey": <bool>,
"showRecordId": <bool>,
"tailable": <bool>,
"oplogReplay": <bool>,
"noCursorTimeout": <bool>,
"awaitData": <bool>,
"allowPartialResults": <bool>,
"collation": <document>
}
)
Command Fields
该命令接受以下字段:
Field | Type | Description |
---|---|---|
find |
string | 集合的名称或要查询的view。 |
filter |
document | 可选的。查询谓词。如果未指定,则集合中的所有文档都将与谓词匹配。 |
sort |
document | 可选的。结果排序的排序规范。 |
projection |
document | 可选的。 projection specification确定要包含在返回的文档中的字段。参见从查询返回的项目字段和Projection Operators。 |
视图上的find()操作不支持以下projection运算符: $ $elemMatch $slice $meta |
||
hint |
字符串或文档 | 可选。索引规格。将索引名称指定为字符串或索引键模式。如果指定,则查询系统将仅使用提示索引考虑计划。 |
skip |
正整数 | 可选。要跳过的文档数。默认为 0. |
limit |
非负整数 | 可选。返回的最大文件数。如果未指定,则默认为无限制。限制为 0 等于没有设置限制。 |
batchSize |
非负整数 | 可选。第一批中要返回的文档数。默认值为 101.batchSize 为 0 表示将构建光标,但是在第一批中将不返回任何文档。 与以前的有线协议版本不同,find命令的 batchSize 为 1 不会关闭游标。 |
singleBatch |
布尔值 | 可选。确定是否在第一批之后关闭光标。默认为 false。 |
comment |
string | 可选。附加到查询的 Comments,以帮助解释和跟踪查询profile数据。 |
maxScan |
正整数 | 可选。执行查询时要扫描的最大文档或索引键数。 |
maxTimeMS |
正整数 | 可选。光标上的处理操作的累积时间限制(以毫秒为单位)。 MongoDB 最早在interrupt point之后中止操作。 |
Tip
当指定线性化阅读关注时,如果大多数数据承载成员不可用,请始终使用maxTimeMS
。 maxTimeMS
确保该操作不会无限期地阻塞,而是确保如果无法满足读取要求,则该操作将返回错误。
|
| readConcern
|文档|可选。指定read concern。
> readConcern 选项具有以下语法:
> 在版本 3.6 中更改。
> readConcern: { level: <value> }
> 可能的阅读关注级别为:
> "local"。这是默认的阅读关注级别。
> "available"。当未指定读取操作和因果一致的会话和“ level”时,这是针对次要对象的读取的默认值。查询返回实例的最新数据。
> "majority"。可用于使用WiredTiger 存储引擎的副本集。
> "linearizable"。仅可用于primary上的读取操作。
> 有关阅读关注级别的更多信息,请参阅阅读关注级别。
> 对于"local"(默认)或"majority"读关注级别,您可以指定afterClusterTime
选项以使读操作返回满足级别要求和在群集时间之后指定的数据。有关更多信息,请参见读取操作和因果一致的会话。
> getMore命令使用原始find
命令中指定的readConcern
级别。
| max
|文档|可选。特定索引的* exclusive 上限。有关详细信息,请参见cursor.max()。
| min
|文档|可选。特定索引的含*下限。有关详细信息,请参见cursor.min()。
| returnKey
|布尔值|可选。如果为 true,则仅返回结果文档中的索引键。默认值为 false。如果 returnKey 为 true 并且find命令不使用索引,则返回的文档将为空。
| showRecordId
|布尔值|可选。确定是否返回每个文档的记录标识符。如果为 true,则将字段$ recordId 添加到返回的文档中。
| tailable
|布尔值|可选。返回一个上限为tailable cursor的集合。
| awaitData
|布尔值|可选。如果在数据末尾而不是不返回数据,则与 tailable 选项结合使用可临时阻止光标上的getMore命令。超时后,find照常返回。
| oplogReplay
|布尔值|可选。用于重播副本集的操作日志的内部命令。
> 要使用oplogReplay
,find
字段必须引用capped collection,并且您必须提供filter
选项,使用以下比较运算符之一将ts
document 字段与timestamp
进行比较:
> $gte
> $gt
> $eq
> 例如,以下命令从data
capped collection重放文档的时间戳晚于或等于 UTC 2018 年 1 月 1 日:
> {找到:“数据”,
> oplogReplay: true,
> 过滤器:{ ts: { $gte: new Timestamp(1514764800, 0) }}}
> 在版本 3.6 中更改:现在支持$eq。
| noCursorTimeout
|布尔值|可选。防止服务器在不活动时间(10 分钟)后使空闲的游标超时。
| allowPartialResults |布尔值|可选。对于针对分片集合的查询,如果一个或多个查询的分片不可用,则允许命令(或后续的getMore命令)返回部分结果,而不是错误。
> |
| collation
|文档|可选。
> 指定用于操作的collation。
> Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
> 排序规则选项具有以下语法:
> collation: {
> locale: <string>,
> caseLevel: <boolean>,
> caseFirst: <string>,
> strength: <int>,
> numericOrdering: <boolean>,
> alternate: <string>,
> maxVariable: <string>,
> backwards: <boolean>
> }
> 指定排序规则时,locale
字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document。
> 如果未指定排序规则,但是集合具有默认排序规则(请参见db.createCollection()),则该操作将使用为集合指定的排序规则。
> 如果没有为集合或操作指定排序规则,则 MongoDB 使用先前版本中使用的简单二进制比较进行字符串比较。
> 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。
> 3.4 版中的新功能。
Output
该命令返回包含游标信息的文档,包括游标 ID 和第一批文档。例如,对分片集合运行时将返回以下文档:
{
"cursor" : {
"firstBatch" : [
{
"_id" : ObjectId("5e8e2ca217b5324fa9847435"),
"zipcode" : "20001",
"x" : 1
},
{
"_id" : ObjectId("5e8e2ca517b5324fa9847436"),
"zipcode" : "30001",
"x" : 1
}
],
"id" : NumberLong("668860441858272439"),
"ns" : "test.contacts"
},
"ok" : 1,
"operationTime" : Timestamp(1586380205, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1586380225, 2),
"signature" : {
"hash" : BinData(0,"aI/jWsUVUSkMw8id+A+AVVTQh9Y="),
"keyId" : NumberLong("6813364731999420435")
}
}
}
Field | Description |
---|---|
cursor |
包含光标信息,包括文档的光标id 和firstBatch 。 |
"ok" |
指示命令是成功(1 )还是失败(0 )。 |
除了前面提到的find特定字段之外,db.runCommand()还包括以下有关副本集和分片群集的信息:
$clusterTime
operationTime
有关详情,请参见db.runCommand() Results。
Behavior
会话空闲超时
从 MongoDB 3.6 开始,MongoDB 驱动程序和mongo shell 将所有操作与server session关联,但未确认的写操作除外。对于未与会话明确关联的操作(即使用Mongo.startSession()),MongoDB 驱动程序和mongo
Shell 创建隐式会话并将其与该操作相关联。
如果会话空闲时间超过 30 分钟,则 MongoDB 服务器会将会话标记为已过期,并可以随时关闭它。当 MongoDB 服务器关闭会话时,它还会终止所有正在进行的操作并打开与该会话关联的游标。这包括配置为noCursorTimeout或maxTimeMS大于 30 分钟的光标。
对于返回游标的操作,如果游标可能闲置了 30 分钟以上,请在使用Session.startSession()
的显式会话中发出操作,并使用refreshSessions命令定期刷新该会话。有关更多信息,请参见会话空闲超时。
Examples
指定排序和限制
以下命令在rating
字段和cuisine
字段上运行find命令过滤。该命令包含projection
,仅返回匹配文档中的以下字段:_id
,name
,rating
和address
字段。
该命令通过name
字段对结果集中的文档进行排序,并将结果集限制为 5 个文档。
db.runCommand(
{
find: "restaurants",
filter: { rating: { $gte: 9 }, cuisine: "italian" },
projection: { name: 1, rating: 1, address: 1 },
sort: { name: 1 },
limit: 5
}
)
覆盖默认读取问题
要覆盖默认的阅读关注级别"local",请使用readConcern
选项。
对副本集的以下操作指定read concern到"majority"来读取已确认已写入大多数节点的数据的最新副本。
要使用read concern级别"majority",副本集必须使用WiredTiger 存储引擎和选举协议版本 1。
从 MongoDB 3.6 开始,默认情况下启用对读取关注"majority"的支持。对于 MongoDB 3.6.1-3.6.x,您可以禁用阅读关注"majority"。有关更多信息,请参见禁用多数阅读关注。
db.runCommand(
{
find: "restaurants",
filter: { rating: { $lt: 5 } },
readConcern: { level: "majority" }
}
)
无论read concern级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
getMore命令使用在原始find命令中指定的readConcern
级别。
可以使用cursor.readConcern方法为mongo shell 方法db.collection.find()指定readConcern
:
db.restaurants.find( { rating: { $lt: 5 } } ).readConcern("majority")
有关可用阅读关注点的更多信息,请参见Read Concern。
Specify Collation
3.4 版的新功能。
Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
以下操作使用指定的排序规则运行find命令:
db.runCommand(
{
find: "myColl",
filter: { category: "cafe", status: "a" },
sort: { category: 1 },
collation: { locale: "fr", strength: 1 }
}
)
mongoShell 程序提供cursor.collation()为db.collection.find()操作指定collation。
See also