Esta seção resume como inserir, consultar e atualizar documentos com nomes de campo que contêm um ponto. O MongoDB desaconselha o uso de nomes de campo que contenham um ponto porque algumas funcionalidades não são compatíveis com esses campos. Consulte Restrições gerais para obter mais informações.
Observação
Limite o número de palavras separadas por pontos nos nomes dos campo para menos de 255. Se você tentar usar mais, o MongoDB retornará um erro.
Inserir um nome de campo com um ponto
Para inserir um documento que contenha um nome de campo com um ponto, coloque o nome do campo entre aspas.
O seguinte comando insere um documento que contém um nome de campo price.usd
:
db.inventory.insertOne( { "item" : "sweatshirt", "price.usd": 45.99, "quantity": 20 } )
Consultar um campo que tenha um período
Para executar uma query em um campo que contém um ponto final, use o operador $getField
.
A consulta a seguir retorna documentos em que o campo price.usd
é maior que 40
:
db.inventory.find( { $expr: { $gt: [ { $getField: "price.usd" }, 40 ] } } )
[ { _id: ObjectId("66145f9bcb1d4abffd2f1b50"), item: 'sweatshirt', 'price.usd': 45.99, quantity: 20 } ]
Se você não usar $getField
, o MongoDB tratará o nome do campo com ponto como um objeto incorporado. Por exemplo, a query a seguir corresponde a documentos em que um campo usd
dentro de um campo price
é maior que 40
:
db.inventory.find( { "price.usd": { $gt: 40 } } )
A query anterior corresponderia a este documento:
{ "item" : "sweatshirt", "price": { "usd": 45.99 }, "quantity": 20 }
Atualizar um campo que contém um período
Para atualizar um campo que tenha um ponto final, use um pipeline de agregação com o operador $setField
.
A seguinte operação define o campo price.usd
como 29.99
:
db.inventory.updateOne( { "item": "sweatshirt" }, [ { $replaceWith: { $setField: { field: "price.usd", input: "$$ROOT", value: 29.99 } } } ] )
Se você não usar $setField
, o MongoDB tratará o nome do campo com um ponto como um objeto incorporado. Por exemplo, a operação a seguir não atualiza o campo price.usd
existente e, em vez disso, insere um novo campo usd
, incorporado dentro de um campo price
:
db.inventory.updateOne( { "item": "sweatshirt" }, { $set: { "price.usd": 29.99 } } )
Resultado do documento:
[ { _id: ObjectId("66145f9bcb1d4abffd2f1b50"), item: 'sweatshirt', 'price.usd': 45.99 quantity: 20, price: { usd: 29.99 } } ]
Para obter mais exemplos de atualizações com pipelines de agregação, consulte Atualizações com pipeline de agregação.