#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
в запросах и результатах запроса. И он всегда индексируется. Итак, неважно … 😋