Faça uma pesquisa aninhada usando pesquisa com pipeline ,
$lookup
comorders
coleção,let
, defina a variávelcustomer_id
que é da coleção principal, para acessar essa variável de referência dentro do pipeline usando$$
como$$customer_id
,pipeline
pode adicionar estágios de pipeline da mesma forma que fazemos no pipeline de nível raiz$expr
sempre que combinamos campos internos, ele requer uma condição de correspondência de expressão, então$$customer_id
é o campo de coleção pai declarado emlet
e$customer_id
é o campo da coleção filha/atual
$lookup
comorderitems
coleção
db.customers.aggregate([
{
$lookup: {
from: "orders",
let: { customer_id: "$customer_id" },
pipeline: [
{ $match: { $expr: { $eq: ["$$customer_id", "$customer_id"] } } },
{
$lookup: {
from: "orderitems",
localField: "order_id",
foreignField: "order_id",
as: "items"
}
}
],
as: "orders"
}
}
])
Playground