我有一个包含这种格式数据的集合(实际上要大得多,但这是我们感兴趣的部分(:
{
'id': 123214546565,
'user': {
id: 2222222
}
}
使用 id 作为键,user.id 可以在集合中重复。
我想要推断所有在数据库中出现超过 20 次 user.id。
我是 MONGO 的新手,我不擅长 JavaScript,我尝试了各种东西,没有结果,我想我应该使用 MapReduce,但我在 JavaScript 部分失败了。
我不能简单地在客户端上搜索它,因为 Mongod 实例是通过网络的,所以我应该尽量减少我发送的数据。
像这样:
db.data.find({}, {'user.id':1, _id: 0})
我找到了所有 user.id,但我仍然想过滤掉之前重复次数少于 20 次的那些,发送更少的数据(我们谈论的是数万条记录,所以它是互联网上的大量数据(
谢谢
如果你使用的是MongoDB v2.2+,我建议使用新的聚合框架。
这是提取在集合上出现超过 20 次user.id
的命令。
db.data.aggregate([{$group: {_id: '$user.id', hits: {$sum: 1}}}, {$match: {hits: {$gt: 20}}}])
MongoDB 聚合框架