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

时间:2012-07-02 21:07:41

标签: node.js mongodb mongoose

关于mongoose中的mongo ObjectId的一些问题

1)可以将ObjectId字段命名为_id吗?怎么做?当我在我的代码中时:

MySchema = new mongoose.Schema({
    id  : mongoose.Schema.ObjectId
});

它什么都没改变。

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

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

谢谢,Alex

1 个答案:

答案 0 :(得分:2)

“_id”元素是mongodb体系结构的一部分,它保证了集合中的每个文档都可以被唯一标识。如果您使用分片在不同的机器上允许唯一标识符,这一点尤为重要。因此,这是一个设计选择,因此无法驾驭它:)

_id的默认值生成如下:

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

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

如果您更容易想到必须存在的事物的_id,但您真的不关心:)只需让系统自动生成它并使用您自己的标识符。

所以,如果您仍想创建自己的“id”,请执行以下操作:

db.mySchema.ensureIndex({"id": 1}, {"unique" : true})

但请确保它非常独特,并且与您使用的API不冲突。

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

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