У меня есть база данных сеансов, в которой хранятся активные сеансы пользователей. это скриншот базы данных сеансов:
теперь, как мы видим, 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.
Я подозреваю, что вам нужно обновить версию mongoose, но для тех, кто сталкивается с той же проблемой, mongoose.Types.ObjectId — это тип ObjectId.
Поэтому, чтобы создать экземпляр ObjectId
из String
, у вас есть два варианта:
ObjectId
и передайте шестнадцатеричный код из 24 символов String
:const findSessions = await Session.find({
user_id: new mongoose.Types.ObjectId(existingUser._id)
});
String
:const findSessions = await Session.find({
user_id: mongoose.Types.ObjectId.createFromHexString(existingUser._id)
});