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.
Evite nomes de campo ambíguos
Não utilize um nome de campo que coincida com a notação de ponto para um campo incorporado. Se você tiver um documento com um campo incorporado { "a" : { "b": ... } }, outros documentos nessa coleção não devem conter um campo de nível superior "a.b".
Se você puder fazer referência a um campo incorporado e a um campo de nível superior da mesma maneira, as operações de indexação e fragmentação ocorrerão no campo incorporado. Você não pode indexar ou fragmentar no campo de nível superior "a.b" enquanto a collection tiver um campo incorporado ao qual você faz referência da mesma maneira.
Por exemplo, se sua collection contiver documentos com um campo incorporado { "a" : { "b": ... } } e um campo de nível superior "a.b", as operações de indexação e fragmentação ocorrerão no campo incorporado . Não é possível indexar ou fragmentar no campo de nível superior "a.b" quando sua coleção também contém um campo incorporado { "a" : { "b": ... } }.