2013-10-12 73 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