我有一个大约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 }
]
);
任何想法我做错了什么?
答案 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()
找到结果。