Você pode utilizar expressões de caminho do 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.
Casos de uso
Você pode usar caminhos de campo para os seguintes casos de uso:
campos aninhados
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
O exemplo seguinte utiliza a coleção movies do banco de dados sample_mflix. Cada documento nesta coleção tem a seguinte estrutura:
{ _id: ObjectId("573a1390f29313caabcd42e8"), title: "The Great Train Robbery", year: 1903, imdb: { rating: 7.4, votes: 9847, id: 439 }, ... }
Observação
Os document na coleção movies contêm campos adicionais não mostrados aqui.
Para especificar o campo aninhado rating dentro do campo imdb, use notação de ponto ("field.nestedField") com um cifrão $. O pipeline de agregação a seguir projeta somente o valor de campo aninhado imdb_rating para o documento correspondente:
db.movies.aggregate( [ { $match: { title: "The Godfather" } }, { $project: { _id: 0, imdb_rating: "$imdb.rating" } } ] )
Abaixo está um exemplo de documento retornado:
[ { imdb_rating: 9.2 } ]
Array de campos aninhados
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: { _id: 0, 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" ] } ]
Array de arrays agrupadas
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" ] ] }
Saiba mais
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.