2017-01-24 204 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')