Docs Menu
Docs Home
/

Documentos

MongoDB almacena registros de datos como documentos BSON. BSON es una representación binaria de DocumentosJSON, aunque contiene más tipos de datos que JSON. Para la especificación BSON, consulte bsonspec.org. Véase también Tipos BSON.

Un documento de MongoDB.

Los documentos de MongoDB están compuestos por pares de campo y valor y tienen la siguiente estructura:

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

El valor de un campo puede ser cualquiera de los tipos de datos BSON, incluidos otros documentos, arreglos y arreglos de documentos. Por ejemplo, el siguiente documento contiene valores de diversos 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)
}

Los campos mencionados anteriormente tienen los siguientes tipos de datos:

  • _id contiene un ObjectId.

  • name incluye un documento incrustado que incluye los campos first y last.

  • birth y death incluye valores del tipo fecha.

  • contribs contiene un arreglo de strings.

  • views contiene un valor del tipo NumberLong.

Los nombres de los campos son strings.

Documentos tienen las siguientes restricciones en los nombres de campo:

  • El nombre del campo _id está reservado para su uso como llave primaria; su valor debe ser único en la colección, es inmutable y puede ser de cualquier tipo que no sea un arreglo o una expresión regular. Si el _id contiene subcampos, los nombres de los subcampos no pueden comenzar con el símbolo ($).

  • Los nombres de campo no pueden contener el caracter null.

  • El servidor permite el almacenamiento de nombres de campo que contienen puntos (.) y signos de dólar ($).

  • MongodB 5.0 ofrece un mejor soporte para el uso de ($) y (.) en los nombres de campo. Existen algunas restricciones. Consulta Consideraciones sobre los nombres de campo para obtener más detalles.

El lenguaje del query de MongoDB no admite documentos con nombres de campo duplicados:

  • Aunque algunos desarrolladores de BSON pueden admitir la creación de un documento BSON con nombres de campos duplicados, la inserción de estos documentos en MongoDB no está permitida, incluso si la inserción tiene éxito o parece tener éxito.

  • Por ejemplo, insertar un documento BSON con nombres de campos duplicados a través de un controlador de MongoDB puede resultar en que el controlador descarte silenciosamente los valores duplicados antes de la inserción, o puede resultar en que se inserte un documento inválido que contenga campos duplicados. Realizar un query en esos documentos lleva a resultados inconsistentes.

  • No se admite la actualización de documentos con nombres de campos duplicados, incluso si la actualización tiene éxito o parece tener éxito.

A partir de MongoDB 6.1, para ver si un documento tiene nombres de campo duplicados, utiliza el comando validate con el campo full establecido en true. En cualquier versión de MongoDB, utiliza el operador de agregación $objectToArray para ver si un documento tiene nombres de campo duplicados.

MongoDB utiliza la notación de puntos para acceder a los elementos de un arreglo y a los campos de un documento incrustado.

Para especificar o acceder a un elemento de un arreglo por la posición del índice basado en cero, concatena el nombre del arreglo con el punto (.) y la posición del índice basado en cero, y encierra entre comillas:

"<array>.<index>"

Por ejemplo, dado el siguiente campo en un documento:

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

Para especificar el tercer elemento en el arreglo contribs, utiliza la notación de puntos "contribs.2".

Para ver ejemplos de consultas a arreglos, visita:

Tip

  • $[] todos los operadores posicionales para las operaciones de actualización.

  • $[<identifier>] operadores posicionales filtrados para operaciones de actualización.

  • $ operadores posicionales para operaciones de actualización.

  • $ operador de proyección cuando se desconoce la posición del índice del arreglo.

  • Consulta un arreglo para obtener ejemplos de notación de puntos con arreglos.

Para especificar o acceder a un campo de un documento incrustado con notación de puntos, concatena el nombre del documento incrustado con el punto (.) y el nombre del campo, y enciérralo entre comillas:

"<embedded document>.<field>"

Por ejemplo, dado el siguiente campo en un documento:

{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}
  • Para especificar el campo llamado last en el campo name, utiliza la notación de puntos "name.last".

  • Para especificar el number en el documento phone en el campo contact, utiliza la notación de puntos "contact.phone.number".

Advertencia

Los campos de partición no pueden utilizar nombres de campo que contengan un punto (.).

Para ejemplos de consultas de documentos incrustados, consulte:

Los documentos tienen los siguientes atributos:

El tamaño máximo de un documento BSON es de 16 mebibytes.

El tamaño máximo de un documento ayuda a garantizar que un único documento no pueda utilizar una cantidad excesiva de RAM o, durante la transmisión, una cantidad excesiva de ancho de banda. Para almacenar documentos más grandes que el tamaño máximo, MongoDB proporciona la API de GridFS. Para obtener más información sobre GridFS, se debe consultar mongofiles y la documentación para el driver.

A diferencia de los objetos de JavaScript, los campos en un documento BSON están ordenados.

Para queries, el comportamiento del orden de los campos es el siguiente:

  • Al comparar documentos, el orden de los campos es significativo. Por ejemplo, al comparar documentos con los campos a y b en una query:

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

    • {a: 1, b: 1} no es igual a {b: 1, a: 1}

  • Para una ejecución eficiente de query, el motor de query puede reordenar los campos durante el procesamiento de query. Entre otros casos, el reordenamiento de campos puede ocurrir al procesar estos operadores de proyección: $project, $addFields, $set y $unset.

    • El reordenamiento de los campos puede ocurrir tanto en los resultados intermedios como en los resultados finales devueltos por una query.

    • Dado que algunas operaciones pueden reordenar los campos, no debes confiar en un orden específico de los campos en los resultados devueltos por una query que utiliza los operadores de proyección enumerados anteriormente.

Para las operaciones de guardado, MongoDB conserva el orden de los campos del documento excepto en los siguientes casos:

  • El campo _id siempre es el primer campo del documento.

  • Las actualizaciones que incluyen renaming de los nombres de campo pueden resultar en el reordenamiento de los campos en el documento.

En MongoDB, cada documento almacenado en una colección estándar requiere un campo _id único que actúa como llave primaria. Si un documento insertado omite el campo _id, el controlador de MongoDB genera automáticamente un ObjectId para el campo _id.

Esto también se aplica a los documentos insertados mediante operaciones de actualización con inserción: true.

Nota

En colecciones de series de tiempo, los documentos no requieren un campo _id único porque MongoDB no crea un índice en el campo _id.

El campo _id tiene el siguiente comportamiento y restricciones:

  • Por defecto, MongoDB crea un índice único en el campo _id durante la creación de una colección.

  • El campo _id siempre es el primer campo en los documentos. Si el servidor recibe un documento que no tiene el campo _id en primer lugar, entonces el servidor moverá el campo al inicio.

  • Si el _id contiene subcampos, los nombres de los subcampos no pueden comenzar con el símbolo ($).

  • El campo _id puede contener valores de cualquier tipo de dato BSON, excepto un arreglo, una expresión regular o un valor indefinido.

    Advertencia

    Para asegurar el funcionamiento correcto de la replicación, no almacenes valores que sean del tipo de expresión regular BSON en el campo _id.

Las siguientes son opciones habituales para almacenar valores para _id:

  • Utilice un ObjectId.

  • Utilice un identificador único natural, si está disponible. Esto ahorra espacio y evita un índice adicional.

  • Genera un número que incrementa automáticamente.

  • Genere un UUID en el código de su aplicación. Para un almacenamiento más eficiente de los valores de UUID en la colección y en el índice _id, almacene el UUID como un valor del tipo BSON BinData.

    Las claves de índice que son del tipo BinData se almacenan de manera más eficiente en el índice si:

    • el valor del subtipo binario está en el rango de 0-7 o 128-135, y

    • la longitud del arreglo de bytes es: 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24 o 32.

  • Se debe usar la función BSON UUID del driver para generar UUID. Ten en cuenta que las implementaciones de drivers pueden implementar la lógica de serialización y deserialización de UUID de manera diferente, lo que puede no ser completamente compatible con otros drivers. Se debe consultar la documentación del driver para obtener información sobre la interoperabilidad de UUID.

Nota

La mayoría de los clientes del controlador de MongoDB incluyen el campo _id y generan un ObjectId antes de enviar la operación de inserción a MongoDB. Sin embargo, si el cliente envía un documento sin un campo _id, el mongod añade el campo _id y genera el ObjectId.

Además de definir registros de datos, MongoDB utiliza la estructura de documentos en todas partes, incluyendo, pero no limitándose a: filtros de query, documentos de especificaciones de actualización y documentos de especificaciones de índice

Los documentos de filtro de query especifican las condiciones que determinan qué registros seleccionar para las operaciones de lectura, actualización y borrado.

Puedes utilizar expresiones <field>:<value> para especificar la condición de igualdad y las expresiones del operador del query.

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

Para ver ejemplos, consulta:

Los documentos de especificación de actualización utilizan operadores de actualización para especificar las modificaciones de datos que se deben realizar en campos específicos durante una operación de actualización.

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

Para ejemplos, consulta Especificaciones de actualización.

Los documentos de especificación de índices definen el campo a indexar y el tipo de índice:

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

Volver

Overview

En esta página