为了账号安全,请及时绑定邮箱和手机立即绑定

为什么有两个名为 _id 和 id 的属性,而 mongoose 返回的对象中只有一个可见?

为什么有两个名为 _id 和 id 的属性,而 mongoose 返回的对象中只有一个可见?

牛魔王的故事 2023-09-28 10:00:04
当我使用 mongoose 在 MongoDB 中查询后打印返回的对象时,我得到一个包含键之一作为“_id”的对象。但是,当我尝试通过访问对象来打印对象的属性 id 和 _id 时,它不会说 id 未定义,而是打印与 _id 相同的 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
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我想你最困惑的部分是id它来自哪里。这是文档中的解释:

Mongoose 默认为每个模式分配一个 id 虚拟 getter,它返回文档的 _id 字段转换为字符串,或者在 ObjectIds 的情况下,返回其十六进制字符串。如果您不希望将 id getter 添加到您的架构中,您可以通过在架构构建时传递此选项来禁用它。 const schema = new Schema({ name: String }, { id: false });

虚拟属性是您可以获取和设置但不会持久保存到 MongoDB 的文档属性。getter 对于格式化或组合字段很有用,而 setter 对于将单个值分解为多个值进行存储非常有用。

查看完整回答
反对 回复 2023-09-28
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

检查用户对象是否存在某些与实例相关的问题,否则不会发生。



查看完整回答
反对 回复 2023-09-28
  • 2 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信