Что лучше для производительности при использовании _id? При получении с использованием _id я получаю сообщение об ошибке: INVALID OBJECT ID
Как я должен ссылаться на коллекцию в другой коллекции, уникальное имя пользователя или по умолчанию _id (идентификатор объекта) или обычный идентификатор, который увеличивается при вставке новой записи. Я прочитал, что идентификаторы объектов увеличивают производительность в mongoose, но я не могу получить записи, используя _ids в качестве ошибки, приводящей к недействительным идентификаторам объектов. я не получаю ошибку при получении с использованием других ключей, таких как имя пользователя. Но поскольку _id увеличивает производительность, я пытаюсь это использовать.
Model.find({_id : "idstring"})
Я попробовал эти 2 способа при определении схемы,
1) нет определения для _id, так как оно будет создано автоматически
2) я определил _id следующим образом: _id: { type: Schema.ObjectId }
В обоих случаях я получаю сообщение об ошибке "неверный идентификатор объекта" при получении записей
Спасибо
2 ответа
Вам нужно создать ObjectID из строки
var ObjectId = require('mongoose').Types.ObjectId;
var myObjectId = ObjectId.fromString('myhexstring');
Оба 1) и 2) делают то же самое. лучше выбрать 1) и пусть мангуст сделает это за вас.
я не знаю о производительности обязательно. Поле _id просто уникально индексируется mongodb для вас, поэтому увеличение производительности в запросах будет связано с этим. Вы можете всегда индексировать любые другие поля, если хотите, чтобы ваш запрос был медленным. проще использовать _id наверняка.
ошибка ID INVALID OBJECT произошла из-за того, что что-то было передано, и mongoose не может привести его к ObjectId. Вы можете передать шестнадцатеричную строку или экземпляр mongoose.Types.ObjectId. шестнадцатеричная строка должна быть длиной 24 символа. перепроверьте это значение.
Кроме того, явное приведение строки к ObjectId выполняется для вас, поэтому нет необходимости делать это вручную.