2017-01-24 151 views
0

我有一个mongo搜索集合。每个搜索都有一个标准对象,它可以有任何标准的组合。所以像这样:计算唯一键 - mongo聚合管道

{ 
    "_id": 1, 
    "criteria": { 
     "state": ["NY", "IL"] 
     ... 
    }, 
    ... 
} 

我正在构建一个mongo聚合管道,我想知道如何只投影键,以便我可以数它们。

到目前为止,我管线的第一步是:

db.userSearch.aggregate([ 
    { "$project": { "criteria":1 } }, 
    ... 
]) 

这将返回所有的标准正确对象,现在我需要以某种投影键。有没有人有任何想法?

编辑: 期望的输出:{"state":20, "balance":5, "geolocation":10, ...}

+0

您可以使用$放松https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/ – Euclides

+0

的标准对象不是一个数组,虽然,也不是它的子对象 –

+0

你能将预期的输出添加到帖子中? – Veeram

回答

1

为了防止有人知道,我以前的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')