Vì có hai bộ sưu tập, chúng tôi cần sử dụng
-
$lookup
để tham gia bộ sưu tập kéo. Ở đây tôi đã sử dụng chưa được mô tả truy vấn phụ - Việc tổng hợp được thực hiện trong
colA
bộ sưu tập, nhưng bên tronglookup
pipeline
chúng tôi thực hiện tổng hợp trêncolB
.$unwind
giúp loại bỏ cấu trúc cácitems
.$match
giúp loại bỏ dữ liệu không mong muốn (giai đoạn đối sánh yêu cầu $ expr ). - Sau khi tham gia thành công, chúng tôi chỉ cần đếm mảng bằng cách sử dụng
$size
-
$reduce
giúp tính tổng giá trị mảng củasize
Tập lệnh mongo được cung cấp bên dưới.
db.colA.aggregate([
{
$lookup: {
from: "colB",
let: {
bid: "$_id"
},
pipeline: [
{
$match: {
$or: [
{
is_delete: false
},
{
is_delete: {
"$exists": false
}
}
]
}
},
{
$unwind: "$items"
},
{
$match: {
$expr: {
$eq: [
"$items._id",
"$$bid"
]
}
}
},
],
as: "data"
}
},
{
$project: {
count: {
$reduce: {
input: "$data",
initialValue: 0,
in: {
$add: [
"$$value",
"$$this.items.size"
]
}
}
}
}
}
])
Làm việc Sân chơi Mongo