如何在mongoDB中的巨大数组上聚合?

时间:2014-09-26 23:15:20

标签: mongodb

我有一个大约400gb的mongodb。这些文档包含各种字段,但这里的关键是ID数组。

所以json文件可能看起来像这样

{
 "name":"bob"
 "dob":"1/1/2011"
 "key":
      [  
       "1020123123",
       "1234123222",
       "5021297723"
      ]
}

这里的焦点变量是" key"。在5000万个文档中总共有大约100亿个密钥(因此每个文档大约有200个密钥)。键可以重复,大约有1500万个UNIQUE键。

我想要做的是返回10,000个最常用的密钥。我认为聚合可能会这样做,但我在运行它时遇到了很多麻烦。这是我的代码:

db.users.aggregate( 
 [ 
  { $unwind : "$key" }, 
  { $group : { _id : "$key", number : { $sum : 1 } } },
  { $sort : { number : -1 } }, 
  { $limit : 10000 }
 ] 
);

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:40)

试试这个:

db.users.aggregate( 
 [ 
  { $unwind : "$key" }, 
  { $group : { _id : "$key", number : { $sum : 1 } } },
  { $sort : { number : -1 } }, 
  { $limit : 10000 },
  { $out:"result"},
 ], {
  allowDiskUse:true,
  cursor:{}
 }
);

然后按db.result.find()找到结果。