Menu Docs
Página inicial do Docs
/

Documentos

O MongoDB armazena registros de dados como documentos BSON. BSON é uma representação binária de documentos JSON com tipos de dados adicionais. Para a especificação BSON, consulte bsonspec.org. Consultetambém Tipos de JSON.

Um documento MongoDB.

Os documentos são compostos por pares de valores de campo e têm a seguinte estrutura:

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

O valor de um campo pode ser qualquer um dos tipos de dados BSON, incluindo outros documentos, matrizes e matrizes de documentos. Por exemplo, o documento a seguir contém valores de vários tipos:

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : Long(1250000)
}

Os campos acima têm os seguintes tipos de dados:

  • _id contém um ObjectId.

  • name Contém um documento incorporado que contém os campos first e last.

  • birth e death contêm valores do tipo Data .

  • contribs contém uma array de strings.

  • views contém um valor do tipo NumberLong .

Os nomes de campo são strings com restrições e requisitos específicos.

As restrições gerais para nomes de campos são:

  • Os nomes de campo não podem conter o caractere null.

  • O servidor permite armazenar nomes de campos que contêm pontos (.) e sinais de dólar ($).

  • MongodB 5.0 adiciona suporte melhorado para o uso de ($) e (.) em nomes de campo. Existem algumas restrições. Consulte Considerações sobre o nome do campo para obter mais detalhes.

Os nomes dos campos devem atender aos seguintes critérios de unicidade:

  • Cada nome de campo deve ser exclusivo dentro do documento. Você não deve armazenar documentos com campos duplicados porque as operações CRUD do MongoDB podem se comportar de forma inesperada se um documento tiver campos duplicados.

  • O MongoDB não suporta a inserção de documentos com nomes de campo duplicados. Embora alguns construtores de BSON possam oferecer suporte à criação de tais documentos, o MongoDB não oferece suporte a eles, mesmo que a inserção seja bem-sucedida ou pareça ter sucesso.

  • A atualização de documentos com nomes de campo duplicados não é suportada, mesmo que a atualização seja bem-sucedida ou pareça ser bem-sucedida.

Por exemplo, inserir um documento BSON com nomes de campo duplicados por meio de um driver MongoDB pode resultar na liberação silenciosa dos valores duplicados antes da inserção, ou pode resultar na inserção de um documento inválido que contenha campos duplicados. A consulta desses documentos leva a resultados inconsistentes.

A partir do MongoDB,6.1 para ver se um documento tem nomes de campo duplicados, use o comando com validate o full campo definido true como. Em qualquer versão do MongoDB , use o $objectToArray operador de agregação para ver se um documento tem nomes de campo duplicados.

Observação

Para obter restrições específicas do campo _id, consulte O Campo _id.

O MongoDB usa a notação de ponto para acessar elementos de arrays e campos de documentos incorporados.

Para especificar ou acessar um elemento de um array pela posição de índice baseada em zero, concatene o nome do array e a posição de índice baseada em zero usando notação de ponto, e coloque o resultado entre aspas:

"<array>.<index>"

Por exemplo, dado o seguinte campo em um documento:

{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}

Para especificar o terceiro elemento na array contribs, utilize "contribs.2".

Para ver exemplos de arrays de consulta, consulte:

Dica

  • $[] todos os operadores posicionais para operações de atualização,

  • $[<identifier>] operador posicional filtrado para operações de atualização,

  • $ operador posicional para operações de atualização,

  • $ operador de projeção quando a posição do índice da array é desconhecida

  • Consulte um array para obter exemplos de notação de ponto com arrays.

Para especificar ou acessar um campo de um documento incorporado, concatene o nome do documento incorporado e o nome do campo usando a notação de ponto, e coloque o resultado entre aspas:

"<embeddedDocument>.<field>"

Por exemplo, dado o seguinte campo em um documento:

{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}
  • Para especificar o campo last em name, use: "name.last".

  • Para especificar o campo number no documento de phone aninhado, use: "contact.phone.number".

Aviso

Os campos de partição não podem usar nomes de campos que contêm um ponto (.).

Para ver exemplos de consultas de documentos incorporados, consulte:

Os documentos do MongoDB têm certos atributos, como tamanho do documento e ordem dos campos, que podem afetar o comportamento da query e o desempenho do aplicativo.

O tamanho máximo do documento BSON é de 16 mebibytes.

O tamanho máximo do documento ajuda a garantir que um único documento não possa usar uma quantidade excessiva de RAM ou uma quantidade excessiva de largura de banda durante a transmissão. Para armazenar documentos maiores do que o tamanho máximo, o MongoDB fornece a API GridFS. Para mais informações sobre o GridFS, veja mongofiles e a documentação do seu driver.

Os campos nos documentos BSON são ordenados (diferente dos objetos JavaScript).

Para consultas, o comportamento da ordem dos campos é o seguinte:

  • A ordem dos campos é significativa na comparação de documentos. Por exemplo:

    • {a: 1, b: 1} é igual a {a: 1, b: 1}

    • {a: 1, b: 1} não é igual a {b: 1, a: 1}

  • O mecanismo de consulta pode reordenar os campos para uma execução eficiente. A reordenação do campo pode ocorrer nos resultados intermediários e finais da consulta e pode ocorrer com os seguintes operadores de projeção:

Importante

Como algumas operações podem reordenar campos, não conte com a ordem de campo específica em resultados de consultas usando os operadores de projeção acima.

Para operações de gravação, o MongoDB preserva a ordem dos campos do documento,exceto para os seguintes casos:

  • O campo _id é sempre o primeiro campo do documento.

  • As atualizações que incluem renaming dos nomes de campos podem resultar na reordenação de campos no documento.

No MongoDB, cada documento armazenado em uma collection padrão requer um campo _id exclusivo que atua como uma chave primária. Se um documento inserido omitir o _id campo, o driver MongoDB gerará automaticamente um ObjectID para o _id campo.

Isso também se aplica a documentos inseridos por meio de operações de atualização com upsert: true.

Observação

Em coleções de séries temporais, os documentos não exigem um campo _id exclusivo porque o MongoDB não cria um índice no _id campo.

Comportamento e Restrições:

  • Ao criar uma coleção, o MongoDB cria um índice único em _id por padrão.

  • O campo _id é sempre o primeiro campo em um documento. Se o servidor receber um documento que não tenha o campo _id primeiro, ele moverá o campo para o início do documento.

  • _id Os nomes dos subcampos não podem começar com um símbolo ($).

  • O campo _id pode conter qualquer tipo de dados BSON, exceto array, regex ou indefinido.

Opções comuns para o valor de _id:

As seguintes são opções comuns para armazenar valores para o campo _id:

  • Usar um ObjectId.

  • Use um identificador exclusivo natural, se disponível. Isso economiza espaço e evita índices adicionais.

  • Gerar um número de incremento automático.

  • Gere um UUID como um tipo BSON BinData para um armazenamento eficiente do UUID na coleção e no índice _id.

    As chaves de índice que são do tipo BinData são armazenadas de forma mais eficiente no índice se:

    • o valor do subtipo binário está na faixa de 0-7 ou 128-135, e

    • o comprimento da array de bytes é: 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24 ou 32.

  • Use a instalação BSON UUID do seu driver para gerar UUIDs. Esteja ciente de que as implementações de drivers podem implementar a lógica de serialização e desserialização do UUID de forma diferente, o que pode não ser totalmente compatível com outros drivers. Consulte a documentação do driver para obter informações sobre a interoperabilidade do UUID.

Observação

A maioria dos clientes de driver do MongoDB inclui o campo _id e gera um ObjectId antes de enviar a operação de inserção para o MongoDB. Entretanto, se o cliente enviar um documento sem um campo _id , o mongod adiciona o campo _id e gera o ObjectId.

Além de definir registros de dados, o MongoDB usa a estrutura do documento em vários outros contextos, incluindo operações de query e manipulação de dados.

Os documentos de filtro de queries especificam condições para operações de leitura, de atualização e de exclusão.

Você pode utilizar expressões do <field>:<value> para especificar a condição de igualdade e expressões do operador de consulta.

{
<field1>: <value1>,
<field2>: { <operator>: <value> },
...
}

Para exemplos, consulte:

Você pode usar operadores de atualização para especificar modificações de campo:

{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}

Para obter exemplos, consulte Atualizar documentos em uma coleção.

Os documentos de especificação de índices definem os campos a serem indexados e seus tipos:

{ <field1>: <type1>, <field2>: <type2>, ... }

Voltar

Visão geral

Nesta página