在mongoose中,id和_id的区别是什么?

84

_idid在mongoose中有什么区别?哪一个更适合用于引用?

1个回答

131
根据文档,Mongoose 默认为每个模式分配一个 id 虚拟 getter。该 getter 返回将文档的 _id 字段强制转换为字符串后的值,对于 ObjectIds,则返回其 hexString。
因此,基本上,id getter 返回文档的 _id 的字符串表示形式(_id 是 MongoDB 文档默认添加的,具有默认类型 ObjectId)。
关于什么更适合引用,这完全取决于上下文(例如,你想要 ObjectId 还是字符串)。例如,如果比较 id,那么字符串可能更好,因为 ObjectId 将不会通过等值测试,除非它们是相同的实例(而与它们表示的值无关)。

1
就引用而言,什么更好取决于上下文(即,您想要一个 ObjectId 还是一个 string)。例如,如果比较 id,则字符串可能更好,因为除非它们是相同的实例(无论它们代表什么值),否则 ObjectId 不会通过等式测试。 - jmar777
5
ObjectId具有equals方法,可用于比较。 - Lucky Soni
1
注意嵌套文档。即使嵌套对象具有带有ObjectId的_id字段,Mongoose也不会将id虚拟分配给它们。 - Elad Nava
@EladNava 这是否意味着,如果您想让一个文档引用另一个文档,您应该为引用 _id 字段的模型分配一个自定义字段? - AlxVallejo
@AlxVallejo 不一定,你只需要自行从 _id 字段读取并将其从 ObjectId 转换为 string - Elad Nava
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接