Как мне заставить Strapi заставить Mongo / Mongoose индексировать столбец «id»?

#node.js #mongodb #mongoose #strapi

#node.js #mongodb #mongoose #strapi

Вопрос:

Кажется, что нет никакого способа (который я вижу) сказать Strapi «заставить» Mongo индексировать id поле моей thing коллекции.

Я узнаю, что он не проиндексирован, выполнив следующую команду непосредственно в Mongo:

 > db.thing.find().sort({id:-1})
Error: error: {
    "ok" : 0,
    "errmsg" : "Executor error during find command :: caused by :: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.",
    "code" : 96,
    "codeName" : "OperationFailed"
}
  

Моя схема thing выглядит следующим образом:

 {
    "kind": "collectionType",
    "connection": "default",
    "collectionName": "",
    "info": {
        "name": "thing",
        "description": ""
    },
    "options": {
        "timestamps": true
    },
    "attributes": {
        "data": {
            "required": true,
            "type": "json"
        },
    }
}
  

Обратите внимание, что поле Mongo-internal _id правильно проиндексировано, что означает, что следующая команда, чтобы предоставить мне все записи коллекции в _id обратном порядке сортировки, работает:

 > db.thing.find().sort({_id:-1})
  

So _id индексируется, но id нет, и я не вижу очевидного способа в определении схемы «принудительно» использовать это.

Что я пробовал: я добавил к определению схемы свое собственное id определение атрибута следующим образом:

 "attributes": {
    "id": {
       "index": true
    },
    "data": {
       ...
    }
  

Очень умно, не так ли? Но Strapi это ни капельки не понравилось … отказывается начинать с:

 error Model "thing" is using reserved attribute names "id".
  

Как мне «предложить» Strapi проиндексировать зарезервированный атрибут id , чтобы мои запросы стали быстрыми?

В качестве небольшого фона я недавно перенес свой Strapi и базу данных с версии 3.0.0 alpha. Так что, возможно, где-то во время этого перехода индексация была пропущена. Но должен быть способ «сообщить» Strapi, что индексировать, а что нет, включая зарезервированные атрибуты, не так ли?

Версия Mongo: 4.2.3

Версия Strapi: 3.0.5

Ответ №1:

Оказывается, я преследовал призрака. id Столбец в Strapi является виртуальным. В Mongo, если это ваша базовая база данных, она физически хранится как _id и отображается только id в запросах и результатах запроса. И он всегда индексируется. Итак, неважно … 😋