Подтвердить что ты не робот

Как агрегировать на огромном массиве в mongoDB?

У меня есть mongodb около 400gb. Документы содержат множество полей, но здесь ключ представляет собой массив идентификаторов.

Таким образом, файл json может выглядеть следующим образом:

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

Фокальная переменная здесь - "ключ". В 50 миллионах документов имеется около 10 миллиардов общих ключей (каждый документ содержит около 200 ключей). Ключи могут повторяться, и есть около 15 миллионов ключей UNIQUE.

То, что я хотел бы сделать, - вернуть 10 000 наиболее распространенных ключей. Я думал, что агрегат может это сделать, но у меня много проблем с его запуском. Вот мой код:

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

Любые идеи, что я делаю неправильно?

4b9b3361

Ответ 1

Попробуйте следующее:

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

Затем найдите результат db.result.find().