mongodb,选择具有在集合中出现至少N次的字段的记录

时间:2013-10-12 00:44:21

标签: mongodb optimization mapreduce

我有一个包含这种格式数据的集合(实际上要大得多,但这是我们感兴趣的部分):

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

将id作为键,user.id可以在集合中重复。

我想把db中出现的所有user.id提取20次以上。

我是mongo的新手,我对javascript并不好,我尝试了各种各样的东西,没有结果,我想我应该使用MapReduce,但我很难用javascript部分。

我不能简单地在客户端上搜索它,因为mongod实例在网络上,所以我应该最小化我发送的数据。

有这样的事情:

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

我找到了所有的user.id,但是我仍然希望过滤掉之前重复次数少于20次的那些,以发送更少的数据(我们正在谈论成千上万的记录,所以这是大量的数据互联网)

感谢

1 个答案:

答案 0 :(得分:1)

如果您使用的是MongoDB v2.2 +,我建议使用新的聚合框架。

以下是提取user.id在集合上出现超过20次的命令。

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

MongoDB Aggregation Framework