как исправить Сортировка, ограничение и пропуск не работают на больших объемах данных - PullRequest
0 голосов
/ 20 сентября 2019

Я использую разбиение на страницы для mat-таблицы и для этого я написал запрос mongoldb следующим образом, но этот запрос не работает для больших данных, он выдает ошибку как: Ошибка исполнителя во время команды поиска :: вызвано :: Операция сортировкииспользовано более 33554432 байт оперативной памяти.Добавьте индекс или укажите меньший лимит.

const sort = { orderId: -1 };
collection.find({ status: { $ne: "cancel" } }).sort(sort).limit(pageSize).skip(skips).toArray(function (err, response) {});

Я ожидаю вывод в порядке защиты согласно orderid.

1 Ответ

0 голосов
/ 20 сентября 2019

Как правило, вам нужно добавить индексы для полей, по которым вы хотите отсортировать.Ошибка возникает из-за отсутствия индекса на orderId, который MongoDB мог бы использовать, а это означает сортировку результатов в памяти.Это работает для небольшого объема данных, но в этом случае это не так, потому что есть ограничение памяти (32 МБ) на то, сколько памяти можно использовать во время операции.Попробуйте добавить следующий индекс:

db.my_collection.createIndex({ status: 1, orderId: -1 }, { background: true })

Это должно помочь вам как в поиске по status, так и в сортировке.Обратите внимание, что индекс будет использоваться эффективно, даже если сортировка основана на не префиксном подмножестве.Это потому, что первая часть запроса включает сравнение равенства первого ключа.Больше на Использование индексов для сортировки результатов запроса .

...