$documents (agregação)
Nesta página
Definição
Sintaxe
O estágio $documents
tem a seguinte forma:
{ $documents: <expression> }
Comportamento
$documents
aceita qualquer expressão válida que se resolva em uma array de objetos. Isso inclui:
variáveis do sistema, como
$$NOW
ou$$SEARCH_META
$let
expressõesvariáveis no escopo de expressões
$lookup
As expressões que não determinam um documento atual, como $myField
ou $$ROOT
, resultarão em um erro.
Exemplos
Testar um estágio do pipeline
Crie dados de teste e depuração para um estágio de pipeline sem criar coleções de teste.
db.aggregate( [ { $documents: [ { x: 10 }, { x: 2 }, { x: 5 } ] }, { $bucketAuto: { groupBy: "$x", buckets: 4 } } ] )
A expressão de aggregation não especifica uma collection. Ela utiliza os dados de entrada destacado no estágio $documents
como entrada no estágio $bucketAuto
.
[ { _id: { min: 2, max: 5 }, count: 1 }, { _id: { min: 5, max: 10 }, count: 1 }, { _id: { min: 10, max: 10 }, count: 1 } ]
Use uma etapa $documents
em uma etapa $lookup
Correlacione documentos em uma collection com outros dados usando $documents
para modificar $lookup
saída.
Crie a coleção locations
.
db.locations.insertMany( [ { zip: 94301, name: "Palo Alto" }, { zip: 10019, name: "New York" } ] )
Utilize o $documents
como fonte de dados para transformar os documentos.
db.locations.aggregate( [ { $match: {} }, { $lookup: { localField: "zip", foreignField: "zip_id", as: "city_state", pipeline: [ { $documents: [ { zip_id: 94301, name: "Palo Alto, CA" }, { zip_id: 10019, name: "New York, NY" } ] } ] } } ] )
A saída correlaciona os dados na coleção locations
com os valores no estágio de pipeline $documents
.
[ { _id: ObjectId("618949d60f7bfd5f5689490d"), zip: 94301, name: 'Palo Alto', city_state: [ { zip_id: 94301, name: 'Palo Alto, CA' } ] }, { _id: ObjectId("618949d60f7bfd5f5689490e"), zip: 10019, name: 'New York', city_state: [ { zip_id: 10019, name: 'New York, NY' } ] } ]
O campo
zip
corresponde ao campozip_id
O parâmetro
as
cria um novo campo de saída
Para obter detalhes sobre subqueries que usam essa sintaxe $lookup
, consulte Subqueries correlacionadas usando sintaxe concisa.