Мне нужно выполнить $group
операцию над всей моей коллекцией. Этот групповой этап достигает предела использования 100 МБ ОЗУ.
Этап $ group имеет ограничение в 100 мегабайт ОЗУ. По умолчанию, если уровень превышает этот предел, $ group выдаст ошибку. Однако, чтобы разрешить обработку больших наборов данных, установите для параметра allowDiskUse значение true, чтобы операции $ group могли записывать во временные файлы.
Я не ограничен оперативной памятью, но не смог найти, как увеличить этот предел использования памяти. Кто-нибудь знает, как настроить это ограничение?
Установка allowDiskUse
в true решит решение, но я предполагаю, что вся операция будет намного медленнее, и я хотел бы найти лучшее решение.
{
$group: {
_id: {
producer: "$producer",
dataset:"$dataset",
featureOfInterest:"$_id.featureOfInterest",
observedProperty:"$_id.observedProperty"
},
documentId: {$push:"$documentId"}
}
}
Эта операция $group
выполняется над целыми сложными объектами (производитель и набор данных). Я понимаю, что эта операция является дорогой, поскольку «она требует сканирования всего набора результатов перед выдачей, и MongoDB должен будет по крайней мере сохранить указатель или индекс каждого элемента в группах». Я бы предпочел $group
для полей uniqueId для обоих этих объектов.
Как я могу сгруппировать объект, используя уникальный идентификатор и $project
весь объект впоследствии?
Я хотел бы получить тот же результат, что и вышеописанная групповая операция, используя приведенную ниже групповую операцию в начале конвейера агрегации:
{
$group: {
_id: {
producer: "$producer.producerId",
dataset:"$dataset.datasetId",
featureOfInterest:"$_id.featureOfInterest",
observedProperty:"$_id.observedProperty"
},
documentId: {$push:"$documentId"}
}
}