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

Ale*_*gan 18 mongodb

我有一个约400gb的mongodb.这些文档包含各种字段,但这里的关键是一系列ID.

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

{
 "name":"bob"
 "dob":"1/1/2011"
 "key":
      [  
       "1020123123",
       "1234123222",
       "5021297723"
      ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

我有什么想法我做错了吗?

Wiz*_*ard 44

试试这个:

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

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

  • 我尝试了此操作,但收到此错误:“异常:超出 $group 的内存限制,但不允许外部排序。传递allowDiskUse:true以选择加入。” 这很奇怪,因为我假设我确实选择使用代码的第二部分。隐马尔可夫模型 (3认同)
  • @AlexKogan是什么结果?我想知道 ? (2认同)