Mongodb 计数唯一密钥-mongo聚合管道

Mongodb 计数唯一密钥-mongo聚合管道,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个mongo搜索集。每个搜索都有一个criteria对象,该对象可以有任何条件组合。比如: { "_id": 1, "criteria": { "state": ["NY", "IL"] ... }, ... } 我正在构建一个mongo聚合管道,我想知道如何只投影密钥,这样我就可以计算它们了 到目前为止,我的计划的第一步是: db.userSearch.aggregate([ { "$project": { "c

我有一个mongo搜索集。每个搜索都有一个criteria对象,该对象可以有任何条件组合。比如:

{
    "_id": 1,
    "criteria": {
        "state": ["NY", "IL"]
        ... 
    },
    ...
}
我正在构建一个mongo聚合管道,我想知道如何只投影密钥,这样我就可以计算它们了

到目前为止,我的计划的第一步是:

db.userSearch.aggregate([
    { "$project": { "criteria":1 } },
    ...
])
这将正确返回所有criteria对象,现在我需要以某种方式投影键。有人有什么想法吗

编辑:
所需的输出:{state:20,balance:5,geolocation:10,…}

如果有人想知道,我使用mapReduce如下

map = function() {
    Object.keys(this.criteria).forEach(function(k) {
        emit(k, 1)
    })
}

reduce = function(k, vals) {
    return Array.sum(vals)
}

db.userSearch.mapReduce(map, reduce, 'out')

您可以使用$unwind。尽管criteria对象不是数组,也不是它的子对象。您可以将预期的输出添加到post?MongoDB查询语言不支持这一点,因为MongoDB是无模式的。您需要使用一些客户端代码或mapreduce。@ares经过一些研究,看起来mapreduce可能是一个不错的选择