ms-dred
@ms-dred
Вечно что то не то и что то не так...

Почему не работает создание индексов в схеме mongoose?

Не пойму что не так, созданное правило добавления индексов в схеме по факту почему то не работает.
Начну с начала
Удаляю все индексы в коллекции popsts
db.posts.dropIndexes()
Результат db.posts.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "site.posts"
        }
]


Пытаюсь произвести выборку .skip(10000).limit(12).sort({indexAt: -1}) на странице вылетает сообщение следующего содержания
Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.

Ок. индекса нет, иду в схему mongoose и добавляю следующее
schema.index({indexAt: 1});
Перезапускаю ноду и обновляю страницу
Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.

Захожу в mongodb и проверяю индексы
[
    {
            "v" : 2,
            "key" : {
                    "_id" : 1
            },
            "name" : "_id_",
            "ns" : "site.posts"
    },
    {
            "v" : 2,
            "unique" : true,
            "key" : {
                    "url" : 1
            },
            "name" : "url_1",
            "ns" : "site.posts",
            "background" : true
    },
    {
            "v" : 2,
            "key" : {
                    "indexAt" : 1
            },
            "name" : "indexAt_1",
            "ns" : "site.posts",
            "background" : true
    }
]


Индекс создался, но ошибка не продает, пока в самой mongodb не создать индекс
db.wallpapers.createIndex({'indexAt': 1})
И только после этого все начинает работать, и структура индексов одинаковая. Почему так? Mongodb кеширует индексы или что происходит? Как это можно побороть? (MongoDB shell version v3.4.10)
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 1
Если еще актуально, то данная ошибка проявляется в связи с тем, что для операции sort() недостаточно памяти. Чтобы увеличить ее лимит до 128Мб, можно попробовать этот метод:
> db.adminCommand({"setParameter": 1, "internalQueryExecMaxBlockingSortBytes" : 134217728})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы