MongoDB:是否可以避免使用自动_id字段?

时间:2011-11-11 22:18:48

标签: c++ mongodb

我的文档中有一个int类型的唯一ID字段。我在这个字段上正在ensureIndex,但我的文档仍然包含_id。我可以摆脱它吗?

3 个答案:

答案 0 :(得分:4)

来自docs ...

  

如果用户尝试在不提供_id字段的情况下插入文档,   数据库将自动生成对象ID 并存储它   _id字段。

但是,您可以将自己的值分配给 _id ...

  

_id值可以是除数组之外的任何类型,只要它是   一个独特的。

更好的问题是,为什么要创建自己的唯一ID,在其上构建索引并删除自动编入索引的非常有用的ObjectID _id

所有官方驱动程序都使用ObjectID,它有很多非常好的方面:

  • 内置时间戳(因此您无需存储日期字段 在您的文档中,您可以使用它按日期订购。)

  • 这是一个“全局的,统一增加的序列号”---即 如果您需要对数据进行分片,它在服务器上仍然是唯一的, 等

答案 1 :(得分:2)

不,您无法摆脱它,it is there by design,但您可以在插入文档时将您的唯一标识符int映射到_id

答案 2 :(得分:2)

一个好主意是将您的哈希存储到_id字段中。

因此,数据库不会自动创建_id字段,因为它已经存在,您将保存未使用索引的空间。

只需将_id字段设置为具有所需值的任何其他字段(例如,哈希)。但要小心,它必须是独一无二的!

要确保单一性,您应该将其设为唯一或将子文档放在_id字段中: {_id:{h:[yourHash],u:[唯一标识符}},...}