Esta sección resume cómo insertar, query y actualizar documentos con nombres de campo que contengan un punto. MongoDB desaconseja el uso de nombres de campos que contengan un punto porque algunas funcionalidades no son compatibles con estos campos. Ver Restricciones generales para más información.
Nota
Limita el número de palabras separadas por puntos en los nombres de los campos a menos de 255. Si intentas usar más, MongoDB devuelve un error.
Introduzca un nombre de campo con un punto
Para insertar un documento que contiene 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 } )
Query un campo que tenga un punto
Para query un campo que contiene un punto, utiliza el operador $getField.
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 utilizas $getField, MongoDB trata el nombre del campo con un punto como un objeto incrustado. Por ejemplo, la siguiente query coincide con 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 }
Actualizar un campo que tiene un punto
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 a 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 ver más ejemplos de actualizaciones con pipelines de agregación, consulta Actualizaciones con pipeline de agregación.