ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Menu Docs

Nomes de campos com pontos

Esta seção aborda como inserir, executar queries em e atualizar documentos com nomes de campo que contêm 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
}
)

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
}

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.