MongoDB almacena registros de datos como documentos BSON. BSON es una representación binaria de DocumentosJSON con tipos de datos adicionales. Para la especificación BSON, consulte bsonspec.org. Véase también Tipos BSON.
Estructura del documento
Los documentos se componen de pares campo-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:
_idcontiene un ObjectId.nameincluye un documento incrustado que incluye los camposfirstylast.birthydeathincluye valores del tipo fecha.contribscontiene un arreglo de strings.viewscontiene un valor del tipo NumberLong.
Nombres de campos
Los nombres de campo son cadenas con restricciones y requisitos específicos.
Restricciones generales
Las restricciones generales para los nombres de campo son:
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.
Requisitos de unicidad
Los nombres de campo deben cumplir los siguientes criterios de unicidad:
Cada nombre de campo debe ser único dentro del documento. No debes almacenar documentos con campos duplicados porque las operaciones CRUD de MongoDB podrían comportarse de manera inesperada si un documento tiene campos duplicados.
MongoDB no permite insertar documentos con nombres de campo duplicados. Si bien algunos compiladores BSON permiten la creación de dichos documentos, MongoDB no los admite, incluso si la inserción se realiza correctamente o parece hacerlo.
No se admite la actualización de documentos con nombres de campos duplicados, incluso si la actualizació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.
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.
Nota
Para conocer las restricciones específicas del _id campo, consulte El _id campo.
Notación de puntos
MongoDB utiliza la notación de puntos para acceder a elementos de matrices y campos de documentos incrustados.
Arreglos
Para especificar o acceder a un elemento de una matriz por su posición de índice basada en cero, concatene el nombre de la matriz y la posición de índice basada en cero usando la notación de punto y encierre el resultado entre comillas:
"<array>.<index>"
Por ejemplo, dado el siguiente campo en un documento:
{ ... contribs: [ "Turing machine", "Turing test", "Turingery" ], ... }
Para especificar el tercer elemento de la matriz contribs, utilice "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.
Documentos incrustados
Para especificar o acceder a un campo de un documento incrustado, concatene el nombre del documento incrustado y el nombre del campo utilizando la notación de punto y encierre el resultado entre comillas:
"<embeddedDocument>.<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
lastenname, utilice:"name.last".Para especificar el campo
numberen el documento anidadophone, utilice:"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:
Limitaciones de documentos
Los documentos MongoDB tienen ciertos atributos, como el tamaño del documento y el orden de los campos, que pueden afectar el comportamiento de la consulta y el rendimiento de la aplicación.
Límite de tamaño del documento
El tamaño máximo de un documento BSON es de 16 mebibytes.
El tamaño máximo del documento ayuda a garantizar que un solo documento no utilice una cantidad excesiva de RAM ni de ancho de banda durante la transmisión. Para almacenar documentos que superen el tamaño máximo, MongoDB proporciona la API de GridFS. Para obtener más información sobre GridFS, consulte y la documentación de mongofiles su controlador.
Orden de los campos del documento
Los campos en los documentos BSON están ordenados (a diferencia de los objetos JavaScript).
Orden de campos en las queries
Para queries, el comportamiento del orden de los campos es el siguiente:
El orden de los campos es importante al comparar documentos. Por ejemplo:
{a: 1, b: 1}es igual a{a: 1, b: 1}{a: 1, b: 1}no es igual a{b: 1, a: 1}
El motor de consultas puede reordenar los campos para una ejecución eficiente. Esta reordenación puede ocurrir en los resultados de consulta intermedios y finales, y puede ocurrir con los siguientes operadores de proyección:
Importante
Debido a que algunas operaciones pueden reordenar los campos, no confíe en el orden de campos específicos en los resultados de las consultas que utilizan los operadores de proyección anteriores.
Orden de campos en las operaciones de guardar
Para las operaciones de guardado, MongoDB conserva el orden de los campos del documento excepto en los siguientes casos:
El campo
_idsiempre es el primer campo del documento.Las actualizaciones que incluyen
renamingde los nombres de campo pueden resultar en el reordenamiento de los campos en el documento.
El _id campo
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.
Comportamiento y restricciones:
Al crear una colección, MongoDB crea un índice único en
_idde forma predeterminada.El campo
_idsiempre es el primero de un documento. Si el servidor recibe un documento que no tiene el campo_idprimero, lo mueve al principio del documento._idLos nombres de subcampos no pueden comenzar con un símbolo ($).El campo
_idpuede contener cualquier tipo de datos BSON excepto arreglo, regex o undefined.
Opciones de valor _id comunes:
Las siguientes son opciones comunes para almacenar valores para el campo _id:
Utilice un ObjectId.
Utilice un identificador único natural, si está disponible. Esto ahorra espacio y evita índices adicionales.
Genera un número que incrementa automáticamente.
Genere un UUID como tipo BSON
BinDatapara un almacenamiento eficiente de UUID en la colección y el índice_id.Las claves de índice que son del tipo
BinDatase 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.
Otros usos de la estructura del documento
Además de definir registros de datos, MongoDB utiliza la estructura del documento en varios otros contextos, incluidas operaciones de consulta y manipulación de datos.
Documentos de filtro de query
Los documentos de filtro de consulta especifican las condiciones para las operaciones de lectura, actualización y eliminación.
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:
Actualizar los documentos de especificación
Puede utilizar operadores de actualización para especificar modificaciones de campo:
{ <operator1>: { <field1>: <value1>, ... }, <operator2>: { <field2>: <value2>, ... }, ... }
Para ver ejemplos, consulte Actualizar documentos en una colección.
Documentos de especificación de índice
Los documentos de especificación de índices definen los campos a indexar y sus tipos:
{ <field1>: <type1>, <field2>: <type2>, ... }