コレクションは2つあるので、使用する必要があります
-
$lookup
2つのコレクションに参加します。ここでは、無相関を使用しましたサブクエリ - 集計は
colA
で実行されます コレクションですが、lookup
内にあります のpipeline
colB
で集計を実行します 。$unwind
items
の構造を解除するのに役立ちます 。$match
不要なデータを排除するのに役立ちます(一致ステージには $expr<が必要です/ a> 。 - 結合が成功したら、
$size
を使用して配列をカウントする必要があります -
$reduce
size
の配列値を合計するのに役立ちます
mongoスクリプトを以下に示します。
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"
]
}
}
}
}
}
])
作業中