文档结构
{
"A": "1",
"B": "3",
"C": "0.000090213",
},
{
"A": "1",
"B": "3",
"C": "0.000037698",
},
{
"A": "2",
"B": "4",
"C": "0.00016664",
}
我试图通过聚合获得特定字段的值计数,A和B的期望结果是
A: { "1": 2, "2": 1}
B: { "3": 2, "4": 1}
非常感谢您的帮助。
db.collection.aggregate([
{
$facet: {
"A": [
{
$group: {
_id: "$A",
v: {
$sum: 1
}
}
}
],
"B": [
{
$group: {
_id: "$B",
v: {
$sum: 1
}
}
}
]
}
},
{
$addFields: {
A: {
$map: {
input: "$A",
as: "a",
in: {
k: "$$a._id",
v: "$$a.v"
}
}
}
}
},
{
$addFields: {
B: {
$map: {
input: "$B",
as: "b",
in: {
k: "$$b._id",
v: "$$b.v"
}
}
}
}
},
{
$project: {
A: {
"$arrayToObject": "$A"
},
B: {
"$arrayToObject": "$B"
}
}
}
])
解释:
- $使用$facet在两个单独的管道中对所需密钥进行分组
- $addFields将_id重命名为k(适用于$arrayToObject(
- $使用$arrayToObject投影所需计数
操场