Puisqu'il y a deux collections, nous devons utiliser
$lookup
pour rejoindre deux collections. Ici, j'ai utilisé uncorelated sous-requêtes- L'agrégation est effectuée dans
colA
collections, mais à l'intérieur de lalookup
pipeline
de nous effectuons l'agrégation surcolB
.$unwind
aide à déstructurer lesitems
.$match
aide à éliminer les données indésirables (l'étape de correspondance nécessite $expr ). - Une fois notre jointure réussie, nous devons simplement compter le tableau en utilisant
$size
$reduce
aide à additionner la valeur du tableau desize
Le script mongo est donné ci-dessous.
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"
]
}
}
}
}
}
])
Travail Terrain de jeu Mongo