Что лучше для производительности при использовании _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 выполняется для вас, поэтому нет необходимости делать это вручную.

Другие вопросы по тегам