Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

pegue mais

Nesta página

  • Definição
  • Sintaxe
  • Campos de comando
  • Saída
  • Comportamento
  • Saiba mais
getMore

Use em conjunto com comandos que retornam um cursor. Por exemplo, find e aggregate para retornar lotes subsequentes de documentos apontados pelo cursor.

O comando tem a seguinte sintaxe:

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

O comando aceita os seguintes campos:

Campo
Tipo
Descrição
getMore
longo
O identificador do cursor.
collection
string
O nome da collection sobre a qual o cursor está operando.
batchSize
número inteiro positivo

Opcional. O número de documentos a retornar no lote.

Se o batchSize não estiver configurado, o getMore retorna até 16 megabytes de dados. Se batchSize estiver configurado, getMore retorna 16 megabytes de dados ou documentos batchSize, o que for menor.

maxTimeMS
número inteiro não negativo

Opcional.

Especifica o tempo máximo para o servidor esperar por novos documentos que correspondam a uma query de cursor tailable em uma capped collection. maxTimeMS em um getMore para um cursor awaitData tailable é considerado o mesmo que maxAwaitTimeMS(). Os drivers só definirão esse valor em getMore para um cursor tailable em uma capped collection com awaitData definido como true. Caso contrário, o comando que cria o cursor define maxTimeMS, que é o tempo máximo que a operação inicial e quaisquer operações getMore subsequentes podem gastar cumulativamente na execução da query. Para cursores tailable com awaitData definido como true, o seguinte é verdadeiro:

  • Se nenhum valor for fornecido, o tempo de espera tem como padrão 1 (1000 milissegundos).

  • maxTimeMS em getMore especifica a quantidade máxima de tempo que o MongoDB espera para que novos documentos sejam inseridos na collection limitada para esse comando getMore específico.

  • maxTimeMS é definido individualmente pelo driver para cada chamada para getMore.

O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de db.killOp(). O MongoDB só encerra uma operação em um de seus pontos de interrupção designados.

  • Você não pode definir maxTimeMS ao chamar getMore em um cursor não tailable. Em vez disso, defina-o usando maxTimeMS() ao criar o cursor.

  • Para usar getMore com maxTimeMS em um cursor tailable, habilite awaitData ao criar o cursor usando cursor.tailable().

  • A configuração de maxTimeMS no comando que cria um cursor apenas define o limite de tempo para essa operação. Use getMore para definir um limite para operações adicionais.

  • Você pode definir ou omitir maxTimeMS para cada chamada para getMore e não precisa usar o mesmo valor.

  • Em um cursor tailable, um tempo limite em getMore retém os documentos acumulados no cursor antes da ocorrência do tempo limite. Para um cursor não tailable, um tempo limite gera um erro.

comment
qualquer

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

Observação

Se omitido, getMore herda qualquer comment definido no comando find ou aggregate de origem.

O comando retorna um documento que contém as informações do cursor, bem como o próximo lote.

Por exemplo, executar o getMore em um cursor criado por uma operação find em um cluster fragmentado retorna um documento semelhante a esta saída:

{
"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")
}
}
}
Campo
Descrição
cursor

Contém as informações do cursor, incluindo a ID do cursor, bem como o nextBatch dos documentos.

Se find (ou comandos getMore subsequentes) retornar resultados parciais porque os shards da query não estão disponíveis, o resultado da busca incluirá um campo indicador partialResultsReturned . Se os shard da query estiverem disponíveis para o comando find inicial, mas um ou mais shards ficarem indisponíveis para comandos getMore subsequentes, somente os comandos getMore executados enquanto os shards não estiverem disponíveis incluirão partialResultsReturned em seu resultado .

O campo postBatchResumeToken pode ser utilizado com o pipeline $changeStream para iniciar ou retomar um fluxo de alteração a partir deste ponto.

"ok"
Indica se o comando foi bem-sucedido (1) ou falhou (0).

Além desses campos, a resposta db.runCommand() inclui as seguintes informações para conjuntos de réplicas e clusters fragmentados:

  • $clusterTime

  • operationTime

Para obter mais informações, consulte db.runCommand() Response.

Se a autenticação estiver habilitada, você somente poderá executar getMore em cursores que você criou.

Para cursores criados dentro de uma sessão, não é possível fazer chamadas getMore fora da sessão.

Da mesma forma, para cursores criados fora de uma sessão, você não pode chamar getMore dentro de uma sessão.

Para transações com vários documentos:

  • Para cursores criados fora de uma transação, você não pode chamar getMore dentro da transação.

  • Para cursores criados em uma transação, você não pode chamar getMore fora da transação.

A partir do MongoDB 5.1, quando um comando getMore é registrado como uma consulta lenta, os campos queryHash e planCacheKey são adicionados à mensagem de registro de query lenta e à mensagem de registro do criador de perfil.

Iterar um cursor em mongosh

← Obter último erro
inserir →