在MongoDB中,同一个数据库中不同集合中的两个文档有多大可能具有相同的Id?

时间:2014-06-20 15:23:44

标签: mongodb primary-key uniqueidentifier

根据MongoDB文档,_id字段(如果未指定)会自动分配12字节的ObjectId。

它表示在创建集合时在此字段上创建了一个唯一索引,但我想知道的是,不同集合中但仍在同一数据库实例中的两个文档具有相同ID的可能性有多大,如果这种情况甚至可能发生?

我希望我的应用程序能够仅使用_id字段检索文档而不知道它在哪个集合中,但是如果我不能保证基于MongoDB生成它的方式的唯一性,我可能需要寻找不同的方式生成Id的。

2 个答案:

答案 0 :(得分:0)

您的问题的简短回答是:是的,这是可能的。

以下类似主题的帖子可以帮助您更好地理解:

Possibility of duplicate Mongo ObjectId's being generated in two different collections?

答案 1 :(得分:0)

  1. 您不需要为id字段使用BSON ObjectId。您可以使用时间戳和一些随机数的哈希值或具有极高基数的字段(例如,美国SSN),以使世界上两个对象几乎不可能共享相同的id < / LI>
  2. _id_索引要求id每个集合都是唯一的。就像在RDBMS中一样,两个表中的两个对象很可能在自动递增整数时具有相同的主键。
  3. 您无法仅通过_id检索文档。我所知道的任何驱动程序都要求您明确命名该集合。
  4. 我的2美分:您唯一能做的就是手动迭代现有的集合并查询您正在寻找的_id。哪个......效率低,说得礼貌。我宁愿在语义上通过一个额外的字段来区分这些文档而不是它们所属的集合。请记住,mongoDB使用动态模式,因此没有理由将语义上属于一起但具有不同字段集的文档分开。我猜你的架构中有严重,显着的 错误。请详细说明,以便我们为您提供帮助。