需要Mongo查询从mongodb获取文档中多个字段的计数

需要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的地方提取所有文档 然后结果应该

我有如下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的地方提取所有文档

然后结果应该是每个字段的总计数和总计数

{
    "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匹配的文档总数?