需要Mongo查询从mongodb获取文档中多个字段的计数
我有如下mongo文档:需要Mongo查询从mongodb获取文档中多个字段的计数,mongodb,mongodb-query,Mongodb,Mongodb Query,我有如下mongo文档: { "a": "test", "b": "test", "c": "test", "d": "test", } { "a": "test", "b": "test", "d": "test", } { "a": "notest", "b": "test", "c": "test", "d": "test", } 我想在a=test的地方提取所有文档 然后结果应该
{
"a": "test",
"b": "test",
"c": "test",
"d": "test",
}
{
"a": "test",
"b": "test",
"d": "test",
}
{
"a": "notest",
"b": "test",
"c": "test",
"d": "test",
}
我想在a=test的地方提取所有文档
然后结果应该是每个字段的总计数和总计数
{
"totalcount" : 3,
"b-count" : 2,
"c-count" : 1,
"d-count" : 1
}
您必须进行聚合。另一种方法是调用3个不同的查找查询并组合结果,大致如下所示:
db.getCollection("").aggregate(
[
{
"$match": {
a: "test"
}
},
{
"$project" : {
"_id" : 0.0,
"b" : 1.0,
"c" : 1.0,
"d" : 1.0
}
},
{
"$addFields" : {
"tmp" : {
"$objectToArray" : "$$ROOT"
}
}
},
{
"$unwind" : "$tmp"
},
{
"$group" : {
"_id" : "$tmp.k",
"count" : {
"$sum" : 1.0
}
}
},
{
"$group" : {
"_id" : null,
"results" : {
"$push" : {
"label" : "$_id",
"count" : "$count"
}
},
"total" : {
"$sum" : "$count"
}
}
}
])
结果的格式与您要求的格式不完全相同,但可以使用和$addFields轻松更改,但是我觉得这样做是多余的。正确使用$objectToArray。它不是一个众所周知的运算符,但对于将lvals键转换为rvals值非常有用。totalcount是多少,集合中的文档总数还是与$match匹配的文档总数?