Bạn có thể sử dụng $reduce
và $concatArrays
để "hợp nhất" một "mảng mảng" bên trong thành một danh sách duy nhất và đo lường $size
của điều đó. Sau đó, chỉ cần $add
hai kết quả cùng nhau:
db.posts.aggregate([
{ "$match": { _id:ObjectId("5dbdacc28cffef0b94580dbd") } },
{ "$addFields": {
"totalBoth": {
"$add": [
{ "$size": "$comments" },
{ "$size": {
"$reduce": {
"input": "$comments.replies",
"initialValue": [],
"in": {
"$concatArrays": [ "$$value", "$$this" ]
}
}
}}
]
}
}}
])
Lưu ý rằng "mảng các mảng" là hiệu ứng của một biểu thức như $comments.replies
, do đó, hoạt động để biến chúng thành một mảng duy nhất, nơi bạn có thể đo lường tất cả các phần tử.