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

getmore

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 行为
getMore

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

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

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

注意

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

getMore 命令采用以下形式:

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设置为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 命令)由于分片的分片不可用而返回部分结果,则 find 输出将包含partialResultsReturned 指示符字段。如果查询的分片可用于初始find 命令,但一个或多个分片不可用于后续的 命令,则只有在分片不可用时运行的getMore getMorepartialResultsReturned命令才会在其输出中包含 。

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

"ok"

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

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

  • $clusterTime

  • operationTime

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

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

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

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

对于多文档事务

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

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

后退

getLastError