Как выполнить операцию поиска для запроса с ObjectId в mongodb?

У меня есть база данных сеансов, в которой хранятся активные сеансы пользователей. это скриншот базы данных сеансов:

теперь, как мы видим, user_id хранит ObjectId пользователей, и я хочу найти все активные сеансы для конкретного пользователя с помощью операции ниже:

const findSessions = await Session.find({ user_id: existingUser._id });

Но проблема в том, что по какой-то причине mongodb обрабатывает ObjectId как простую строку и возвращает в качестве результата пустой массив.

Я попытался преобразовать его как ObjectId, используя следующий подход:

const userId = new mongoose.Types.ObjectId(existingUser._id);

но там написано:

Подпись '(inputId: Number): ObjectId' для 'mongoose.Types.ObjectId' устарела.ts(6387) bson.d.ts(1239, 8): здесь декларация помечена как устаревшая. конструктор Types.ObjectId(inputId:number): mongoose.Types.ObjectId (+6 перегрузок) Создайте ObjectId из числа.

@param inputId — число.

@deprecated — вместо этого используйте статический createFromTime(), чтобы установить числовое значение для нового ObjectId.


1
75
1

Ответ:

Решено

Я подозреваю, что вам нужно обновить версию mongoose, но для тех, кто сталкивается с той же проблемой, mongoose.Types.ObjectId — это тип ObjectId.

Поэтому, чтобы создать экземпляр ObjectId из String, у вас есть два варианта:

  1. Используйте конструктор ObjectId и передайте шестнадцатеричный код из 24 символов String:
const findSessions = await Session.find({ 
   user_id: new mongoose.Types.ObjectId(existingUser._id) 
});
  1. Используйте метод ObjectId.createFromHexString и передайте шестнадцатеричный код из 24 символов String:
const findSessions = await Session.find({ 
   user_id: mongoose.Types.ObjectId.createFromHexString(existingUser._id) 
});