我需要获取products
数组中存在的数组元素的总数。
到目前为止,我已经尝试使用$size=>$products
方法,但是由于从技术上讲有两个数组,所以我得到的值只有2
,但是我也想对内部元素进行计数,以便得出期望的结果是3
。
我知道我需要使用$unwind
,但是我不知道这种方法。
{
_id:2,
card_pay:3998,
count:4598,
orders:2,
products:[
[
{
product_id:{
$oid:"5c63d418ae1db123d8048276"
},
amount:2499,
quantity:1,
status:1
},
{
product_id:{
$oid:"5c46f7f329067970211471a0"
},
amount:200,
quantity:2,
status:1
}
],
[
{
product_id:{
$oid:"5c63d3afae1db123d8048273"
},
amount:1499,
quantity:1,
status:1
}
]
]
}
编辑1:
['$project'=>[ 'number_of_products'=> ['$size'=> '$products']
到目前为止,我已经尝试过了。
编辑2:
到目前为止,我已经尝试过了。
[
'$project'=>[
'posts'=> [
'$map'=> [
'input'=> '$products',
'as'=> 'products_inner',
'in'=> [
'Count'=>[
'$size'=> '$$products_inner'
]
]
],
],
我正在得到输出
[
{
_id: 2,
posts: [
{
Count: 2
},
{
Count: 1
}
]
}
]
现在我需要做的就是计算数值以得到3
作为答案
答案 0 :(得分:1)
您非常接近$ map的解决方案。这是您必须做的:(随意将此控制台查询翻译成您的语言实现):
db.collection.aggregate([
{
$project: {
totalPosts: {
$sum: {
$map: {
input: "$products",
as: "products_inner",
in: {
$size: "$$products_inner"
}
}
},
}
}
},
])
将导致:
[
{
"_id": 2,
"totalPosts": 3
}
]