Complex对多个非常大的MongoDB集合进行排序

时间:2017-08-07 23:38:15

标签: mongodb mongodb-query aggregation-framework

我有一个mongodb数据库,目前有大约30个集合,范围从1.5gb到2.5gb,我需要重新格式化并将数据排序到嵌套组中并将它们转储到新集合中。该数据库最终将拥有大约2000个相同类型和数据格式的集合。

目前可以使用以下数据:

{
"_id" : ObjectId("598392d6bab47ec75fd6aea6"),
"orderid" : NumberLong("4379116282"),
"regionid" : 10000068,
"systemid" : 30045305,
"stationid" : 60015036,
"typeid" : 7489,
"bid" : 0,
"price" : 119999.91,
"minvolume" : 1,
"volremain" : 6,
"volenter" : 8,
"issued" : "2015-12-31 09:12:29",
"duration" : "14 days, 0:00:00",
"range" : 65535,
"reportedby" : 0,
"reportedtime" : "2016-01-01 00:22:42.997926"} {...} {...} 

我需要通过regionid对这些进行分组> typeid>这样的出价:

{"regionid": 10000176,
"orders": [
{
  "typeid": 34,
  "buy": [document, document, document, ...],
  "sell": [document, document, document, ...]
},
{
  "typeid": 714,
  "buy": [document, document, document, ...],
  "sell": [document, document, document, ...]
}]
}

以下是我理想的输出格式样本的详细信息:https://gist.github.com/BatBrain/cd3426c29ce8ca8152efd1fa06ca1392

我一直在尝试使用db.collection.aggregate()来执行此操作,将此命令作为初始测试步骤运行:

db.day_2016_01_01.aggregate( [{ $group : { _id : "$regionid", entries : { $push: "$$ROOT" } } },{ $out : "test_group" }], { allowDiskUse:true, cursor:{} })

但我收到了这条消息,"errmsg" : "BufBuilder attempted to grow() to 134217728 bytes, past the 64MB limit."

我试着研究如何使用游标对象,但是我很困惑如何在这种情况下应用它,或者即使这是一个可行的选择。任何建议或解决方案都会很棒。

0 个答案:

没有答案