Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Documentos

Un documento es la unidad básica de datos en MongoDB.

El modelo de datos orientado a objetos de MongoDB le permite estructurar los datos para reflejar los modelos de objetos en su base de código, lo que elimina el mapeo objeto-relacional requerido por las bases de datos relacionales.

Nota

MongoDB almacena registros de datos como documentos BSON. BSON es una representación binaria de documentos JSON, aunque contiene más tipos de datos que JSON. Para la especificación de BSON, consulta bsonspec.org. Consulta también BSON Types.

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:

Nota

Operadores posicionales

  • El $[] todos los operadores posicionales actualizan todos los elementos del campo de arreglo especificado durante una operación de actualización.

  • El operador posicional filtrado $[<identifier>] actualiza todos los elementos del arreglo que coinciden con las condiciones especificadas en arrayFilters.

  • El operador posicional $ actualiza el primer elemento de arreglo que coincide con la condición de query, sin necesidad de especificar su índice.

  • El operador de proyección $ devuelve el primer elemento de arreglo que coincide con la condición de query en una operación de lectura.

  • Para ver ejemplos de notación de puntos con arreglos, incluidas las querys por posición de índice de arreglo basada en cero, consulte Query un arreglo.

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.

Obtén una insignia de habilidad

¡Domina los "Fundamentos de la arquitectura de MongoDB" gratis!

Más información