C++ MongoDB:是否可以避免使用自动id字段?
我的文档中有一个类型为C++ MongoDB:是否可以避免使用自动id字段?,c++,mongodb,C++,Mongodb,我的文档中有一个类型为int的唯一ID字段。我正在对该字段执行ensureIndex,但我的文档仍然包含\u id。我可以删除它吗?不,您不能删除它,但是您可以在插入文档时将您的唯一标识符int映射到\u id本身。从 如果用户试图在不提供_id字段的情况下插入文档, 数据库将自动生成一个对象id并存储它 _id字段 但是,您可以将自己的值指定给\u id _id值可以是数组以外的任何类型,只要是 独一无二的 更好的问题是,为什么要创建自己的唯一ID,在其上建立索引,并删除自动索引的非常有用的O
int
的唯一ID字段。我正在对该字段执行ensureIndex
,但我的文档仍然包含\u id
。我可以删除它吗?不,您不能删除它,但是您可以在插入文档时将您的唯一标识符int
映射到\u id
本身。从
如果用户试图在不提供_id字段的情况下插入文档,
数据库将自动生成一个对象id并存储它
_id字段
但是,您可以将自己的值指定给\u id
_id值可以是数组以外的任何类型,只要是
独一无二的
更好的问题是,为什么要创建自己的唯一ID,在其上建立索引,并删除自动索引的非常有用的ObjectID\u ID
所有的官方驱动程序都使用ObjectID,它有很多非常好的方面:
- 它内置了一个时间戳(因此不需要存储日期字段) 在文档中,您可以使用它按日期订购。)
- 它是一个“全局的、均匀递增的序列号”——即。 如果您需要共享数据,它在服务器之间仍然是唯一的, 等等
- 一个好主意是将散列存储到_id字段中
因此,数据库不会自动创建_id字段,因为它已经存在,您将节省未使用索引的空间
只需将_id字段设置为具有所需值的任何其他字段(例如,您的哈希值)。但要小心,它必须是独一无二的
为确保唯一性,您应使其唯一或在_id字段中放置一个子文档:
{{u id:{h:[yourHash],u:[唯一标识符]},…}谢谢!我是MongoDB的新手,我错过了您引用的文档部分。感谢您解释使用ObjectID的好处。尽管如此,我还是想使用我的ID,因为它是一个散列(无论如何我都需要将它存储在我的文档中),而且它比ObjectID小。很乐意提供帮助,很明显,这是关于什么最适合你的应用程序的,但我发现ObjectID在很多情况下非常有用,我在刚开始时没有想到过。玩得开心,可能对你也有帮助!这正是我所做的,一举两得:我的文档不包含庞大的ObjectID,而且我不需要在每次插入后调用
ensureIndex
——我得到了显著的加速(我决不会认为ensureIndex
这么慢)@Violet Giraffe:无需在每次插入后调用ensureIndex
——它只需在数据库的生命周期中调用一次,就像MySQL一样。而且,ObjectID
并不是一个真正的“大”字段。尽管如此,我还是同意使用散列是有意义的。在讨论哈希、对象id和guid时,请确保您了解一致性和潜在碎片密钥的长期含义。