#javascript #node.js #mongodb
#javascript #node.js #mongodb
Вопрос:
Когда я печатаю объект, возвращенный после запроса в MongoDB с помощью mongoose, я получаю объект, содержащий один из ключей как ‘_id’. Но когда я пытаюсь напечатать идентификатор свойства объекта и _id, обратившись к объекту, тогда для идентификатора не указывается undefined, вместо этого он печатает тот же идентификатор, что и _id. Я прилагаю скриншоты для кода и вывода ниже.
Вот фрагмент кода
const user = await User.findById(req.params.id);
console.log(user);
console.log(user.id, user._id);
В следующем выводе мы видим, что id и _id содержат одно и то же значение, хотя в пользовательском объекте нет такого свойства, как ‘id’
{
role: 'user',
_id: 5fc6cad25884d51790aad697,
name: 'Test 001',
email: 'test001@gmail.com',
__v: 0
}
5fc6cad25884d51790aad697 5fc6cad25884d51790aad697
Ответ №1:
Я полагаю, что основная запутанная часть для вас id
— это то, откуда она берется. Вот объяснение из документации:
Mongoose по умолчанию присваивает каждой из ваших схем виртуальный получатель id, который возвращает поле _id документа, приведенное к строке, или, в случае ObjectIds, его шестнадцатеричную строку. Если вы не хотите, чтобы средство получения идентификатора добавлялось в вашу схему, вы можете отключить его, передав эту опцию во время построения схемы.
const schema = new Schema({ name: String }, { id: false });
Виртуалы — это свойства документа, которые вы можете получить и установить, но которые не сохраняются в MongoDB. Геттеры полезны для форматирования или объединения полей, в то время как сеттеры полезны для разбиения одного значения на несколько значений для хранения.
подробнее об этом можно прочитать в документации:
Ответ №2:
Проверьте, есть ли у объекта user какая-либо проблема, связанная с экземпляром, или нет, иначе этого не произойдет.