Сгруппировать коллекцию MongoDB по 5 полям, где в коллекции более 5 миллионов записей - PullRequest
1 голос
/ 29 января 2020

Используемый мной запрос Mon go, который работает с меньшим фрагментом данных:

var map = function () {
    emit({item:this.item, outlet:this.outlet, batch:this.batch, item_name:this.item_name, outlet_name:this.outlet_name}, {count:1,_id:this._id});
}

var reduce = function(k, values) {
    var result = {count: 0,_id:[]};
    values.forEach(function(value) {
        result.count += value.count;
        result._id.push(value._id);
    });
    return result;
}

db.ItemMovementSummary.mapReduce(map,reduce,{out: { replace : "multi_result"}})
db.multi_result.find({'value.count' : {$gte : 2}})

Ошибка mon go дает мне:

"message": "ошибка уменьшения карты: MongoError: Превышен предел глубины 150 при преобразовании объекта js в BSON. У вас есть цикл?", "code": 17279

Есть ли какие-либо Чтобы решить эту проблему, я попытался сгруппировать их изначально, что не удалось с ошибкой

Запланировать ошибку исполнителя при групповой команде ::, вызванная :: group (), не может обработать более 20000 уникальных ключей

1 Ответ

0 голосов
/ 29 января 2020

Метод db.collection.group () не работает с сегментированными кластерами. Используйте структуру агрегации или map-Reduce в защищенных средах.

Набор результатов должен соответствовать максимальному размеру документа BSON.

В версии 2.2 возвращаемый массив может содержать не более 20 000 элементов; т.е. не более 20 000 уникальных группировок. Для операций по группам, которые приводят к более чем 20 000 уникальных группировок, используйте mapReduce Предыдущие версии имели ограничение в 10 000 элементов.

http://man.hubwiz.com/docset/MongoDB.docset/Contents/Resources/Documents/docs.mongodb.org/manual/reference/command/mapReduce/index.html#dbcmd .mapReduce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...