我有以下采集数据
{
"_id": 1,
"date": "2023-11-08",
"field": "A"
},
{
"_id": 2,
"date": "2023-11-08",
"field": "B"
},
{
"_id": 3,
"date": "2023-11-08",
"field": "C"
},
{
"_id": 4,
"date": "2023-11-09",
"field": "B"
},
{
"_id": 5,
"date": "2023-11-09",
"field": "C"
}
我想要按日期分组并计数总计,并且计数字段值在数组中或不在数组中
数组是这样的
['A'、'D'、'E'、...]
我想要的输出
{
_id: '2023-11-08',
in_array: 1,
not_in_array: 2,
count: 3
},
{
_id: '2023-11-09',
in_array: 0,
not_in_array: 2,
count: 2
}
我怎样才能做到?
在
$sum
中执行条件 $group
。
db.collection.aggregate([
{
"$group": {
"_id": "$date",
"in_array": {
$sum: {
$let: {
vars: {
inputArray: [
"A",
"D",
"E"
]
},
in: {
"$cond": {
"if": {
"$in": [
"$field",
"$$inputArray"
]
},
"then": 1,
"else": 0
}
}
}
}
},
"not_in_array": {
$sum: {
$let: {
vars: {
inputArray: [
"A",
"D",
"E"
]
},
in: {
"$cond": {
"if": {
$not: {
"$in": [
"$field",
"$$inputArray"
]
}
},
"then": 1,
"else": 0
}
}
}
}
},
"count": {
$sum: 1
}
}
}
])