Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

getmore

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 输出
  • 行为
  • 了解详情
getMore

与返回游标的命令结合使用。例如,findaggregate,用于返回游标当前指向的文档的后续批次。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

该命令具有以下语法:

db.runCommand(
{
getMore: <long>,
collection: <string>,
batchSize: <int>,
maxTimeMS: <int>,
comment: <any>
}
)

该命令接受以下字段:

字段
类型
说明
getMore
long
游标标识符。
collection
字符串
游标所操作的集合的名称。
batchSize
正整数

可选。该批次中待返回的文档数量。

如果未设置 batchSize,则 getMore 最多返回 16 MB 数据。如果已设置 batchSize,则 getMore 返回 16 MB 数据或 batchSize 文档中较小的一个。

maxTimeMS
non-negative integer

可选。

指定服务器等待出现与固定大小集合可追加游标查询匹配的新文档的最长时间。对于可追加 awaitData 游标,getMore 上的 maxTimeMS 被认为与 maxAwaitTimeMS() 相同。驱动程序只会为固定大小集合上且 awaitData 设置为 true 的追加游标,在 getMore 上设置此值。否则,创建游标的命令会设置 maxTimeMS,这是初始操作和任何后续 getMore 操作可以累积执行查询所花费的最长时间。对于将 awaitData 设置为 true 的可追加游标,以下情况成立:

  • 如果未提供值,则等待时间默认为 1(1000 毫秒)。

  • maxTimeMSgetMore 上指定 MongoDB 等待将新文档插入特定 getMore 命令的固定大小集合的最长时间。

  • maxTimeMS 由驱动程序为每次调用 getMore 单独设置。

MongoDB 使用与 db.killOp() 相同的机制终止超过分配的时间限制的操作。MongoDB 仅在指定的中断点之一中终止操作。

  • 在不可追加游标上调用 getMore 时,无法设置 maxTimeMS。相反,请在创建游标时使用 maxTimeMS() 进行设置。

  • 要在可追加游标上使用 getMoremaxTimeMS,请在使用 cursor.tailable() 创建游标时启用 awaitData

  • 在创建游标的命令上设置 maxTimeMS 仅设置该操作的时间限制。使用 getMore 为进一步的操作设限。

  • 您可以为每次调用 getMore 而设置或者可以省略 maxTimeMS,并且不必使用相同的值。

  • 对于可追加游标,getMore 的超时会保留游标中发生超时之前累积的文档。对于不可追加游标,超时会引发错误。

comment
any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

如果省略,getMore 会继承在原始 findaggregate 命令上设置的任何 comment

此命令会返回包含游标信息的文档以及下一批处理。

例如,在分片集群上通过 find 操作创建的游标上运行 getMore 会返回与以下输出类似的文档:

{
"cursor" : {
"id" : NumberLong("678960441858272731"),
"ns" : "test.contacts",
"nextBatch" : [
{
"_id" : ObjectId("5e8e501e1a32d227f9085857"),
"zipcode" : "220000"
}
],
"partialResultsReturned" : true,
"postBatchResumeToken": "< Resume Token >"
},
"ok" : 1,
"operationTime" : Timestamp(1586385239, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1586385239, 2),
"signature" : {
"hash" : BinData(0,"lLjejeW6AQGReR9x1PD8xU+tP+A="),
"keyId" : NumberLong("6813467763969884181")
}
}
}
字段
说明
cursor

包含游标信息,包括游标 ID 以及文档的 nextBatch

如果 find(或后续的 getMore 命令)因查询的分片不可用而返回部分结果,则查找输出会包含 partialResultsReturned 指示字段。如果查询的分片可用于初始 find 命令,但一个或多个分片不可用于后续 getMore 命令,则只有在分片不可用时运行的 getMore 命令才会在其输出中包含 partialResultsReturned

postBatchResumeToken 字段可以与 $changeStream 管道一起使用,从此处开始或恢复变更流。

"ok"
表明命令是成功(1)还是失败(0)。

除这些字段外,db.runCommand() 响应还包括副本集和分片集群的以下信息:

  • $clusterTime

  • operationTime

请参阅 db.runCommand() 响应,了解详情。

如果启用了身份验证,那么您只能对您创建的游标运行 getMore

对于在会话内创建的游标,无法在会话外调用 getMore

同样,对于在会话外创建的游标,无法在会话内调用 getMore

对于多文档事务

  • 对于在事务之外创建的游标,无法在事务内调用 getMore

  • 对于在事务中创建的游标,无法在事务外调用 getMore

从 MongoDB 5.1 开始,当 getMore 命令记录为慢查询时,queryHashplanCacheKey 字段将添加到慢查询日志消息分析器日志消息中。

从 MongoDB 8.0 开始,预先存在的 queryHash 字段被重命名为 planCacheShapeHash。如果正在使用早期版本的 MongoDB,您将看到 queryHash 而不是 planCacheShapeHash

后退

getLastError