Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Caminhos do campo

Nesta página

  • Casos de uso
  • Saiba mais

Você pode utilizar expressões de caminhodo campo para acessar campos em documentos de entrada. Para especificar um caminho do campo, prefixe o nome do campo ou o caminho do campo com pontos (se o campo estiver em um documento incorporado) com um $ cifrão.

Você pode usar caminhos de campo para os seguintes casos de uso:

  • Campos aninhados

  • Array de campos aninhados

  • Array de arrays agrupadas

O exemplo seguinte utiliza a coleção de planetas dos Bancos de Dados de Amostra de Atlas. Cada documento nesta coleção tem a seguinte estrutura:

{
_id: new ObjectId("6220f6b78a733c51b416c80e"),
name: "Uranus",
orderFromSun: 7,
hasRings: true,
mainAtmosphere: [ "H2", "He", "CH4" ],
surfaceTemperatureC: { min: null, max: null, mean: -197.2 }
}

Para especificar o campo aninhado mean dentro do surfaceTemperatureC campo, use notação de ponto de ponto ("field.nestedField") com um $ cifrão. O pipeline de agregação a seguir projeta somente o mean valor de campo aninhado para cada documento:

db.planets.aggregate( [
{
$project: {
nested_field: "$surfaceTemperatureC.mean"
}
}
] )

Abaixo está um exemplo de documento retornado:

{ _id: ObjectId('6220f6b78a733c51b416c80e'), nested_field: -197.2 }

Você pode usar a notação de ponto em um caminho do campo para acessar um campo aninhado em uma array.

Por exemplo, considere uma collection products que contém um campo instock. O campo instock contém uma array de campos warehouse aninhados.

db.products.insertMany( [
{ item: "journal", instock: [ { warehouse: "A"}, { warehouse: "C" } ] },
{ item: "notebook", instock: [ { warehouse: "C" } ] },
{ item: "paper", instock: [ { warehouse: "A" }, { warehouse: "B" } ] },
{ item: "planner", instock: [ { warehouse: "A" }, { warehouse: "B" } ] },
{ item: "postcard", instock: [ { warehouse: "B" }, { warehouse: "C" } ] }
] )

O seguinte pipeline de agregação utiliza $instock.warehouse para acessar os campos do warehouse aninhados.

db.products.aggregate( [
{
$project: {
item: 1,
warehouses: "$instock.warehouse"
}
}
] )

Neste exemplo, $instock.warehouse gera um array de valores que estão no campo warehouse aninhado para cada documento. O pipeline retorna os seguintes documentos:

[
{
_id: ObjectId('6740b55e33b29cf6b1d884f7'),
item: "journal",
warehouses: [ "A", "C" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884f8'),
item: "notebook",
warehouses: [ "C" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884f9'),
item: "paper",
warehouses: [ "A", "B" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884fa'),
item: "planner",
warehouses: [ "A", "B" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884fb'),
item: "postcard",
warehouses: [ "B", "C" ]
}
]

Você também pode usar a notação de ponto com um $ cifrão em um caminho do campo para acessar uma array dentro de uma array aninhada.

Este exemplo utiliza uma coleção fruits que contém o seguinte documento:

db.fruits.insertOne(
{
_id: ObjectId("5ba53172ce6fa2fcfc58e0ac"),
inventory: [
{
apples: [
"macintosh",
"golden delicious",
]
},
{
oranges: [
"mandarin",
]
},
{
apples: [
"braeburn",
"honeycrisp",
]
}
]
}
)

O documento na collection contém um array inventory em que cada elemento no array é um objeto que contém um campo de array aninhado.

Considere o seguinte pipeline de agregação :

db.fruits.aggregate( [
{ $project:
{ all_apples: "$inventory.apples" } }
] )

Neste pipeline, $inventory.apples é resolvido para uma array de arrays aninhadas. O pipeline retorna o seguinte documento:

{
_id: ObjectId('5ba53172ce6fa2fcfc58e0ac'),
all_apples: [
[ "macintosh", "golden delicious" ],
[ "braeburn", "honeycrisp" ]
]
}

Para obter mais informações sobre como acessar e interagir com elementos aninhados, consulte Notação de ponto e query de uma array de documentos incorporados.

Voltar

Pipeline de agregação