5

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

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

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

它没有任何改变。

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

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

谢谢,亚历克斯

4

1 回答 1

4

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

_id 的默认值生成如下:

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

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

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

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

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

但请确保它确实是独一无二的,并且不会与您使用的 API 冲突。

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

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

于 2012-07-03T01:28:09.610 回答