Bạn có thể sử dụng các truy vấn phụ không liên quan, có sẵn từ MongoDB v3.6
db.Profile.aggregate([
{
$match: { is_del: false }
},
{
$lookup: {
from: "Store",
as: "stores",
let: {
pid: { $toString: "$_id" }
},
pipeline: [
{
$match: {
is_del: false,
$expr: { $eq: ["$$pid", "$id"] }
}
},
{
$lookup: {
from: "Item",
as: "items",
let: {
sid: { $toString: "$_id" }
},
pipeline: [
{
$match: {
is_del: false,
$expr: { $eq: ["$$sid", "$sid"] }
}
},
{
$count: "count"
}
]
}
},
{
$unwind: "$items"
}
]
}
}
])
Để cải thiện hiệu suất, tôi khuyên bạn nên lưu trữ các id tham chiếu dưới dạng ObjectId
vì vậy bạn không cần phải chuyển đổi chúng trong mỗi bước.