Nomes de campos com pontos
Nesta página
Esta seção aborda como inserir, executar queries em e atualizar documentos com nomes de campo que contêm um ponto.
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 query de um campo que tenha um período, 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.