Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Códigos operacionais legados

Nesta página

  • OP_DELETE
  • OP_GET_MORE
  • OP_INSERT
  • OP_KILL_CURSORS
  • OP_QUERY
  • OP_REPLY
  • OP_UPDATE

Esta página descreve os opcodes legados que não são mais suportados pelo MongoDB. Esses opcodes legados são:

  • Obsoleto a partir do MongoDB 5.0.

  • Não suportado a partir do MongoDB 5.1.

A partir de MongoDB 5.1, OP_MSG e OP_COMPRESSED são os únicos opcodes suportados a enviar pedidos para um servidor MongoDB .

A mensagem OP_DELETE é usada para remover um ou mais documentos de uma coleção. O formato da mensagem OP_DELETE é:

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 flags; // bit values - see below for details.
document selector; // query object. See below for details.
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
ZERO
Valor total de 0. Reservado para uso futuro.
fullCollectionName
O nome completo da coleção, especificamente seu namespace. O namespace é a concatenação do nome do banco de dados com o nome da coleção, utilizando um . para a concatenação. Por exemplo, para o banco de dados test e a coleção contacts, o namespace completo é test.contacts.
flags

Valores de bits para a operação: Os valores de bit correspondem ao seguinte:

  • 0 corresponde a SingleRemove. Se definido, o banco de dados removerá apenas o primeiro documento correspondente na coleção. Caso contrário, todos os documentos correspondentes serão removidos.

  • 1-31 estão reservados. Deve ser 0.

selector
Documento JSON que representa a query usada para selecionar os documentos a serem removidos. O seletor contém um ou mais elementos, todos os quais devem corresponder para que um documento seja removido da coleção.

Não há resposta a uma mensagem OP_DELETE.

A mensagem OP_GET_MORE é usada para executar query no banco de dados para documentos em uma coleção. O formato da mensagem OP_GET_MORE é:

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 numberToReturn; // number of documents to return
int64 cursorID; // cursorID from the OP_REPLY
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
ZERO
Valor total de 0. Reservado para uso futuro.
fullCollectionName
O nome completo da coleção, especificamente seu namespace. O namespace é a concatenação do nome do banco de dados com o nome da coleção, utilizando um . para a concatenação. Por exemplo, para o banco de dados test e a coleção contacts, o namespace completo é test.contacts.
numberToReturn

Limita o número de documentos na primeira mensagem OP_REPLY à query. No entanto, o banco de dados ainda estabelecerá um cursor e retornará o cursorID ao cliente se houver mais resultados do que numberToReturn. Se o driver cliente oferecer funcionalidade 'limit' (como a palavra-chave SQL LIMIT), caberá ao driver cliente garantir que não mais do que o número especificado de documento seja retornado ao aplicativo de chamada.

Se numberToReturn for:

  • 0, o banco de dados utiliza o tamanho de retorno padrão.

  • Negativo, o banco de dados retorna esse número e fecha o cursor. Nenhum resultado adicional para essa query pode ser obtido.

  • 1, o servidor tratará o valor como -1 (fechando o cursor automaticamente).

cursorID
Identificador do cursor que veio em OP_REPLY. Este deve ser o valor que veio do banco de dados.

O banco de dados responderá a uma mensagem OP_GET_MORE com uma mensagem OP_REPLY.

A mensagem OP_INSERT é usada para inserir um ou mais documentos em uma coleção. O formato da mensagem OP_INSERT é:

struct {
MsgHeader header; // standard message header
int32 flags; // bit values - see below
cstring fullCollectionName; // "dbname.collectionname"
document* documents; // one or more documents to insert into the collection
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
flags

Valores de bits para a operação: Os valores de bit correspondem ao seguinte:

  • 0 corresponde ao ContinueOnError. Se definido, o database não interromperá o processamento de uma bulk insert se alguma falhar (por exemplo, devido a IDs duplicados). Isso faz com que a inserção em massa se comporte de forma semelhante a uma série de inserções únicas, exceto lastError será definido se qualquer inserção falhar, não apenas a última. Se ocorrerem vários erros, apenas o mais recente será relatado por getLastError.

  • 1-31 estão reservados. Deve ser 0.

fullCollectionName
O nome completo da coleção, especificamente seu namespace. O namespace é a concatenação do nome do banco de dados com o nome da coleção, utilizando um . para a concatenação. Por exemplo, para o banco de dados test e a coleção contacts, o namespace completo é test.contacts.
documents
Um ou mais documentos para inserir na coleção. Se houver mais de um, eles serão gravados no soquete em sequência, um após o outro.

Não há resposta a uma mensagem OP_INSERT.

A mensagem OP_KILL_CURSORS é usada para fechar um cursor ativo no banco de dados. Isso é necessário para garantir que os recursos do banco de dados sejam recuperados no final da query. O formato da mensagem OP_KILL_CURSORS é:

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
int32 numberOfCursorIDs; // number of cursorIDs in message
int64* cursorIDs; // sequence of cursorIDs to close
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
ZERO
Valor total de 0. Reservado para uso futuro.
numberOfCursorIDs
O número de ID de cursor que estão na mensagem.
cursorIDs
"Array" de IDs de cursor a serem fechadas. Se houver mais de um, eles serão gravados no soquete em sequência, um após o outro.

Se um cursor for lido até esgotar (leia até OP_QUERY ou OP_GET_MORE retornar zero para o ID do cursor), não será necessário matar o cursor.

A mensagem OP_QUERY é usada para executar query do banco de dados para documentos em uma coleção. O formato da mensagem OP_QUERY é:

struct OP_QUERY {
MsgHeader header; // standard message header
int32 flags; // bit values of query options. See below for details.
cstring fullCollectionName ; // "dbname.collectionname"
int32 numberToSkip; // number of documents to skip
int32 numberToReturn; // number of documents to return
// in the first OP_REPLY batch
document query; // query object. See below for details.
[ document returnFieldsSelector; ] // Optional. Selector indicating the fields
// to return. See below for details.
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
flags

Valores de bits para a operação: Os valores de bit correspondem ao seguinte:

  • 0 está reservado. Deve ser 0.

  • 1 corresponde ao TailableCursor. Significa que o cursor não está fechado quando os últimos dados são recuperados. Em vez disso, o cursor marca a posição do objeto final. Você pode continuar usando o cursor mais tarde, de onde ele estava localizado, se mais dados foram recebidos. Como qualquer cursor latente, o cursor pode se tornar inválido em algum momento (CursorNotFound) – por exemplo, se o objeto final ao qual ele faz referência foi excluído.

  • 2 corresponde ao SlaveOk. Permitir query de réplica escrava. Normalmente estes retornam um erro, exceto para o namespace "local".

  • 3 corresponde ao OplogReplay. Você não precisa especificar esse sinalizador porque a otimização acontece automaticamente para queries qualificadas no oplog. Consulte oplogReplay para mais informações.

  • 4 corresponde ao NoCursorTimeout. O servidor normalmente atinge o tempo limite dos cursores ociosos após um período de inatividade (10 minutos) para evitar o uso excessivo de memória. Defina esta opção para evitar isso.

  • 5 corresponde a AwaitData. Use com TailableCursor. Se o cursor estiver no final dos dados, bloqueie por um tempo em vez de não retornar nenhum dado. Após um período de tempo limite, o servidor retorna normalmente.

  • 6 corresponde à escape. Transmitir os dados de forma intensa em vários pacotes "mais", partindo do pressuposto de que o cliente lerá integralmente todos os dados consultados. Mais rápido quando você está extraindo muitos dados e sabe que deseja extrair tudo. Observação: o cliente não tem permissão para não ler todos os dados, a menos que feche a conexão.

  • 7 corresponde a Parcial. Obtenha resultados parciais de um mongo se alguns shards estiverem inativos (em vez de gerar um erro)

  • 8-31 estão reservados. Deve ser 0.

fullCollectionName
O nome completo da coleção, especificamente seu namespace. O namespace é a concatenação do nome do banco de dados com o nome da coleção, utilizando um . para a concatenação. Por exemplo, para o banco de dados test e a coleção contacts, o namespace completo é test.contacts.
numberToSkip
Define o número de documentos a serem omitidos, começando pelo primeiro documento no conjunto de dados resultante, ao retornar o resultado da query.
numberToReturn

Limita o número de documentos na primeira mensagem OP_REPLY à query. No entanto, o banco de dados ainda estabelecerá um cursor e retornará o cursorID ao cliente se houver mais resultados do que numberToReturn. Se o driver cliente oferecer funcionalidade 'limit' (como a palavra-chave SQL LIMIT), caberá ao driver cliente garantir que não mais do que o número especificado de documento seja retornado ao aplicativo de chamada.

Se numberToReturn for:

  • 0, o banco de dados utiliza o tamanho de retorno padrão.

  • Negativo, o banco de dados retorna esse número e fecha o cursor. Nenhum resultado adicional para essa query pode ser obtido.

  • 1, o servidor tratará o valor como -1 (fechando o cursor automaticamente).

query
Documento JSON que representa a query. A query contém um ou mais elementos, todos os quais devem corresponder para que um documento seja incluído no conjunto de resultados. Os possíveis elementos incluem $query, $orderby, $hint e $explain.
returnFieldsSelector

Opcional. Documento JSON que limita os campos nos documentos devolvidos. O returnFieldsSelector contém um ou mais elementos, cada um dos quais é o nome de um campo que deve ser retornado e o valor inteiro 1. Na notação JSON, um returnFieldsSelector para limitar aos campos a, b e c seria:

{ a : 1, b : 1, c : 1}

O banco de dados responderá a uma mensagem OP_QUERY com uma mensagem OP_REPLY.

Observação

O MongoDB 5.1 remove o suporte para OP_QUERY operações de localização e comandos OP_QUERY. Como uma exceção, o OP_QUERY ainda é suportado para executar os comandos hello e isMaster como parte do handshake de conexão.

A mensagem OP_REPLY é enviada pelo banco de dados em resposta a uma mensagem OP_QUERY ou OP_GET_MORE. O formato de uma mensagem OP_REPLY é:

struct {
MsgHeader header; // standard message header
int32 responseFlags; // bit values - see details below
int64 cursorID; // cursor ID if client needs to do get more's
int32 startingFrom; // where in the cursor this reply is starting
int32 numberReturned; // number of documents in the reply
document* documents; // documents
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
responseFlags

Valores de bits para a operação: Os valores de bit correspondem ao seguinte:

  • 0 corresponde ao CursorNotFound. É definido quando getMore é chamado, mas o ID do cursor não é válido no servidor. Retornado com zero resultados.

  • 1 corresponde a QueryFailure. É definido quando a query falha. Os resultados consistem em um documento contendo um campo "$err" descrevendo a falha.

  • 2 corresponde ao ShardConfigStale. Os drivers devem ignorar isso. Somente mongos verá esse conjunto; nesse caso, ele precisará atualizar a configuração do servidor.

  • 3 corresponde a AwaitCapable. É definido quando o servidor suporta a opção AwaitData Query. Caso contrário, o cliente deve dormir um pouco entre getMore de um cursor Tailable.

  • 4-31 estão reservados. Ignorar.

cursorID
O cursorID do qual este OP_REPLY faz parte. Caso o conjunto de resultados da query se encaixe em uma mensagem OP_REPLY, cursorID será 0. Este cursorID deve ser usado em qualquer mensagem OP_GET_MORE usada para obter mais dados e também deve ser fechado pelo cliente quando não for mais necessário por meio de uma mensagem OP_KILL_CURSORS .
startingFrom
Posição inicial no cursor.
numberReturned
Número de documentos na resposta.
documents
Documentos devolvidos.

A mensagem OP_UPDATE é usada para atualizar um documento em uma coleção. O formato de uma mensagem OP_UPDATE é o seguinte:

struct OP_UPDATE {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 flags; // bit values. see below
document selector; // the query to select the document
document update; // specification of the update to perform
}
Campo
Descrição
header
Cabeçalho da mensagem. Consulte Cabeçalho de mensagem padrão.
ZERO
Valor total de 0. Reservado para uso futuro.
fullCollectionName
O nome completo da coleção, especificamente seu namespace. O namespace é a concatenação do nome do banco de dados com o nome da coleção, utilizando um . para a concatenação. Por exemplo, para o banco de dados test e a coleção contacts, o namespace completo é test.contacts.
flags

Valores de bits para a operação: Os valores de bit correspondem ao seguinte:

  • 0 corresponde ao Upsert. Se definido, o banco de dados inserirá o objeto fornecido na coleção se nenhum documento correspondente for encontrado.

  • 1 corresponde a MultiUpdate.Se configurado, o banco de dados atualizará todos os objetos correspondentes na coleção. Caso contrário, apenas atualiza o primeiro documento correspondente.

  • 2-31 estão reservados. Deve ser 0.

selector
Documento JSON que especifica a query para seleção do documento a ser atualizado.
update
Documento JSON que especifica a atualização a ser executada. Para obter informações sobre como especificar atualizações, consulte a documentação das Operações de Atualização.

Não há resposta a uma mensagem OP_UPDATE.

Voltar

Protocolo de fio