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.

Volver

Nombres de campos con prefijo de dólar

En esta página