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

Caminhos do campo

Use expressões de caminho do campo para acessar campos em documentos de entrada. Prefixe o nome do campo ou o caminho do campo pontilhado (para documentos incorporados) com um cifrão $.

Os exemplos seguintes utilizam 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 em surfaceTemperatureC, use a notação de ponto ("field.nestedField") com um cifrão $. Este pipeline de agregação projeta apenas o valor do campo aninhado mean para cada documento:

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

Um exemplo de documento retornado:

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

Use a notação de ponto em um caminho do campo para acessar um campo aninhado em uma array. Por exemplo, considere uma coleção products cujo 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. O exemplo a seguir usa uma coleção fruits com este documento:

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

O seguinte pipeline de agregação acessa os arrays apples aninhados dentro de inventory:

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

Nesta página