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