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

在MongoDB中,同一数据库中不同集合中的两个文档具有相同Id的可能性有多大?,mongodb,primary-key,uniqueidentifier,Mongodb,Primary Key,Uniqueidentifier,根据MongoDB文档,会自动为_id字段(如果未指定)分配一个12字节的ObjectId 它说在创建集合时会在此字段上创建一个唯一索引,但我想知道的是,在不同集合中但仍在同一数据库实例中的两个文档具有相同ID的可能性有多大,如果可能的话 我希望我的应用程序能够只使用_id字段检索文档,而不知道它在哪个集合中,但是如果我不能根据MongoDB生成文档的方式保证文档的唯一性,我可能需要寻找另一种生成id的方式。对于您的问题,简短的回答是:是的,这是可能的 下面关于类似主题的帖子有助于您更好地理解:

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

它说在创建集合时会在此字段上创建一个唯一索引,但我想知道的是,在不同集合中但仍在同一数据库实例中的两个文档具有相同ID的可能性有多大,如果可能的话


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

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

下面关于类似主题的帖子有助于您更好地理解:

  • 对于
    id
    字段,不需要使用BSON对象id。您可以使用时间戳和一些随机数的散列或基数极高的字段(例如US SSN),以使世界上的两个对象几乎不可能共享相同的
    id
  • \u id
    索引要求每个集合的
    id
    是唯一的。很像在RDBMS中,当两个表中的两个对象是一个自动递增的整数时,它们很可能具有相同的主键
  • 您不能仅凭文档的
    \u id
    检索文档。我知道的任何驱动程序都要求您显式命名集合
  • 我的2美分:您唯一能做的就是手动迭代现有集合,并查询您要查找的
    \u id
    。那就是。。。说得客气一点,效率低下。我宁愿通过一个额外的字段而不是它们所属的集合在语义上区分有问题的文档。记住,mongoDB使用动态模式,因此没有理由将语义上属于一起但具有不同字段集的文档分开。我猜你出了严重的问题。请详细说明,以便我们可以帮助您。

    可能的副本