MongoDB-统计字段的值出现次数



文档结构

{
"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"
}
}
}
])

解释:

  1. $使用$facet在两个单独的管道中对所需密钥进行分组
  2. $addFields将_id重命名为k(适用于$arrayToObject(
  3. $使用$arrayToObject投影所需计数

操场

相关内容

  • 没有找到相关文章

最新更新