Mongoose.js:是否可以更改 ObjectId 的名称?

WHI*_*LOR 5 mongoose mongodb node.js

关于mongoose中mongo ObjectId的一些问题

1) 可以不是命名为 _id 的 ObjectId 字段吗?以及如何做到这一点?当我在我的代码中做:

MySchema = new mongoose.Schema({
    id  : mongoose.Schema.ObjectId
});
Run Code Online (Sandbox Code Playgroud)

它什么都不改变。

2)如果我有一个名为 _id 的 objectId 字段,是否可以从请求返回此字段的另一个名称(例如,只是“id” - 在 Web 响应中发送它);

3) 问题只是为了理解:为什么 ObjectId _id 字段可以通过“id”属性而不是“_id”访问?

谢谢,亚历克斯

小智 4

“_id”元素是 mongodb 架构的一部分,它保证集合中的每个文档都可以被唯一标识。如果您使用分片来允许跨不同机器的唯一标识符,这一点尤其重要。因此,这是一个设计选择,所以没有办法摆脱它:)

_id 的默认值生成如下:

  • 时间戳
  • 机器主机名的哈希值
  • 生成进程的pid
  • 增量

但你可以使用任何你想要的值,只要它是唯一的。

如果你更容易考虑必须存在的东西的 _id ,但你真的不关心:)只需让系统自动生成它并使用你自己的标识符即可。

因此,如果您仍然想创建自己的“id”,请执行类似的操作:

db.mySchema.ensureIndex({"id": 1}, {"unique" : true})
Run Code Online (Sandbox Code Playgroud)

但要确保它确实是唯一的,并且不会与您使用的 API 冲突。

2) 在将其作为 Web 响应发送之前,在应用程序端对其进行重命名。

3)我认为这是因为你使用的API。也许作者发现返回 id 而不是 _id 更符合逻辑?老实说从来没有尝试过猫鼬:)