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

当我使用 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


牛魔王的故事
浏览 132回答 2
2回答

陪伴而非守候

我想你最困惑的部分是id它来自哪里。这是文档中的解释:Mongoose 默认为每个模式分配一个 id 虚拟 getter,它返回文档的 _id 字段转换为字符串,或者在 ObjectIds 的情况下,返回其十六进制字符串。如果您不希望将 id getter 添加到您的架构中,您可以通过在架构构建时传递此选项来禁用它。 const schema = new Schema({ name: String }, { id: false });虚拟属性是您可以获取和设置但不会持久保存到 MongoDB 的文档属性。getter 对于格式化或组合字段很有用,而 setter 对于将单个值分解为多个值进行存储非常有用。

慕妹3146593

检查用户对象是否存在某些与实例相关的问题,否则不会发生。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript