2013-10-12 113 views
1

我有一個以這種格式(實際上大得多,但這是我們感興趣的部分)數據的集合:mongodb,選擇在字段中出現至少N次的字段

{ 
    'id': 123214546565, 
    'user': { 
     id: 2222222 
     } 
} 

以id作爲鍵,並且user.id可以在集合中重複。

我打算extrac出現在數據庫超過20次的所有user.id。

我是mongo的新手,我不擅長javascript和i'v嘗試過各種各樣的東西,沒有結果,我想我應該使用MapReduce,但是我很難用javascript部分。

我不能簡單地在客戶端上搜索它,因爲mongod實例在網絡上,所以我應該儘量減少我發送的數據。

像這樣的東西:

db.data.find({}, {'user.id':1, _id: 0}) 

我發現所有的user.id,但我還是想篩選出的那些與前少於20次重複,發送更少的數據(我們是談話記錄約數萬所以它在互聯網上大量的數據)

感謝

回答

1

如果您在MongoDB的V2.2 +我建議使用新的聚合框架。

以下是在集合中提取出現超過20次的user.id的命令。

db.data.aggregate([{$group: {_id: '$user.id', hits: {$sum: 1}}}, {$match: {hits: {$gt: 20}}}]) 

MongoDB Aggregation Framework

+0

完美,非常感謝你 – kurojishi