Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MongoDB:是否可以避免使用自动id字段?_C++_Mongodb - Fatal编程技术网

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时,请确保您了解一致性和潜在碎片密钥的长期含义。