文档菜单
文档首页
/
MongoDB 手册
/ / /

getMore

在本页面上

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

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

此命令可在以下环境中的部署中使用

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

注意

此命令在所有MongoDB Atlas集群中均受支持。有关所有命令的Atlas支持信息,请参阅不受支持的命令。

命令具有以下语法

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

命令接受以下字段

字段
类型
描述
getMore
长整型
光标标识符。
集合
字符串
光标操作所在集合的名称。
batchSize
正整数

可选。每次批量返回的文档数量。

如果未设置batchSize,则getMore返回最多16兆字节的数据。如果设置了batchSize,则getMore返回的数据量不会超过16兆字节或batchSize文档中的较小值。

maxTimeMS
非负整数

可选。

指定服务器等待新文档匹配可尾部游标查询在固定集合上的最大时间。对getMoremaxTimeMS操作在awaitData设置为true的尾部光标上视为与maxAwaitTimeMS()相同。驱动程序仅在具有awaitData设置为true的固定集合上的尾部光标上设置此值。否则,创建光标的命令会设置maxTimeMS,这是初始操作以及任何后续getMore操作可以累计执行查询的最大时间。对于awaitData设置为true的尾部光标,以下为真

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

  • getMore上的maxTimeMS指定MongoDB等待新文档插入固定集合以执行特定getMore命令的最大时间。

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

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

  • 在调用getMore时无法设置maxTimeMS。相反,在创建光标时使用maxTimeMS()设置它。

  • 要在带有maxTimeMS的尾部光标上使用getMore,在创建光标时使用cursor.tailable()启用awaitData

  • 在创建光标的命令上设置maxTimeMS仅设置该操作的时间限制。使用getMore来设置后续操作的限制。

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

  • 对于尾部光标,getMore的超时保留在超时发生前积累在光标中的文档。对于非尾部光标,超时会引发错误。

注释
任何

可选。用户提供的附加到此命令的注释。一旦设置,此注释将出现在以下位置的相关命令记录旁边

注释可以是任何有效的 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 命令期间不可用,则只有在此期间不可用的分片上运行的 getMore 命令包含输出中的 partialResultsReturned

可以使用 postBatchResumeToken 字段与 $changeStream 管道从这个点开始或恢复更改流。

"ok"
指示命令是否成功(1)或失败(0)。

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

  • $clusterTime

  • operationTime

请参阅db.runCommand()响应以获取详细信息。

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

对于在会话内部创建的光标,您不能在会话外部调用getMore

同样,对于在会话外部创建的光标,您不能在会话内部调用getMore

对于多文档事务:

  • 对于在事务外创建的光标,您不能在事务内调用getMore

  • 对于在事务内创建的光标,您不能在事务外调用getMore

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

从MongoDB 8.0开始,现有的queryHash字段重命名为planCacheShapeHash。如果您使用的是早期版本的MongoDB,您将看到queryHash而不是planCacheShapeHash

后退

getLastError