Docs Menu
Docs Home
/ /

Nombres de campos con puntos.

Esta sección resume cómo insertar, consultar y actualizar documentos con nombres de campo que contienen un punto. MongoDB desaconseja el uso de nombres de campo que contengan un punto porque algunas funciones no son compatibles con estos campos. Consulte Restricciones generales para más información.

Nota

Limite el número de palabras separadas por puntos en los nombres de campo a menos de 255. Si intenta usar más, MongoDB devuelve un error.

Para insertar un documento que contenga un nombre de campo con un punto, coloque el nombre del campo entre comillas.

El siguiente comando inserta un documento que contiene un nombre de campo price.usd:

db.inventory.insertOne(
{
"item" : "sweatshirt",
"price.usd": 45.99,
"quantity": 20
}
)

Para consultar un campo que tiene un punto, utilice el $getField operador.

La siguiente consulta devuelve documentos donde el campo price.usd es mayor que 40:

db.inventory.find(
{
$expr:
{
$gt: [ { $getField: "price.usd" }, 40 ]
}
}
)
[
{
_id: ObjectId("66145f9bcb1d4abffd2f1b50"),
item: 'sweatshirt',
'price.usd': 45.99,
quantity: 20
}
]

Si no se usa $getField, MongoDB trata el nombre del campo con un punto como un objeto incrustado. Por ejemplo, la siguiente consulta busca documentos donde un campo usd dentro de un campo price es mayor que 40:

db.inventory.find( {
"price.usd": { $gt: 40 }
} )

La consulta anterior coincidiría con este documento:

{
"item" : "sweatshirt",
"price": {
"usd": 45.99
},
"quantity": 20
}

Para actualizar un campo que tiene un punto, utilice una canalización de agregación con el $setField operador.

La siguiente operación establece el campo price.usd en 29.99:

db.inventory.updateOne(
{ "item": "sweatshirt" },
[
{
$replaceWith: {
$setField: {
field: "price.usd",
input: "$$ROOT",
value: 29.99
}
}
}
]
)

Si no se usa $setField, MongoDB trata el nombre del campo con un punto como un objeto incrustado. Por ejemplo, la siguiente operación no actualiza el campo price.usd existente, sino que inserta un nuevo campo usd, incrustado dentro de un campo price:

db.inventory.updateOne(
{ "item": "sweatshirt" },
{ $set: { "price.usd": 29.99 } }
)

Documento resultante:

[
{
_id: ObjectId("66145f9bcb1d4abffd2f1b50"),
item: 'sweatshirt',
'price.usd': 45.99
quantity: 20,
price: { usd: 29.99 }
}
]

Para obtener más ejemplos de actualizaciones con canalizaciones de agregación, consulte Actualizaciones con canalización de agregación.

No utilice un nombre de campo que sea igual a la notación de puntos para un campo incrustado. Si tiene un documento con un campo incrustado { "a" : { "b": ... } }, los demás documentos de esa colección no deben tener un campo de nivel superior "a.b".

Si puede referenciar un campo incrustado y un campo de nivel superior de la misma manera, las operaciones de indexación y fragmentación ocurren en el campo incrustado. No se puede indexar ni fragmentar en el campo de nivel superior "a.b" mientras la colección tiene un campo incrustado al que se hace referencia de la misma manera.

Por ejemplo, si su colección contiene documentos con un campo incrustado { "a" : { "b": ... } } y un campo de nivel superior "a.b", las operaciones de indexación y fragmentación ocurren en el campo incrustado. No es posible indexar o fragmentar en el campo de nivel superior "a.b" cuando su colección también contiene un campo incrustado { "a" : { "b": ... } }.

Volver

Nombres de campos con prefijo de dólar

En esta página