使用手动指定的\u id插入mongodb集合

使用手动指定的\u id插入mongodb集合,mongodb,Mongodb,假设我在mongodb中有一个集合,集合中的对象有一个_id,它是我以某种完全在mongodb之外的随机方式选择的ObjectID,例如从ObjectID 0000开始。。。0000并递增10000,或者可能只是使用随机数生成器生成ObjectID 假设我随后向集合中添加另一项,但我没有为新对象准备ObjectID,并且对让系统选择一项感到满意。系统会选择已经是集合一部分的ObjectID吗 如果相关的话,我将使用java API和python API来实现这一点。\u id总是唯一的。\u i

假设我在mongodb中有一个集合,集合中的对象有一个_id,它是我以某种完全在mongodb之外的随机方式选择的ObjectID,例如从ObjectID 0000开始。。。0000并递增10000,或者可能只是使用随机数生成器生成ObjectID

假设我随后向集合中添加另一项,但我没有为新对象准备ObjectID,并且对让系统选择一项感到满意。系统会选择已经是集合一部分的ObjectID吗


如果相关的话,我将使用java API和python API来实现这一点。

\u id
总是唯一的。
\u id
字段上有一个隐式唯一主索引

因此,请放心,MongoDB不会选择已获取的
\u id
字段

另外,
\u id
字段是一个12字节的十六进制字符串,其中:

  • 4字节表示日期时间戳
  • 3字节是MAC地址
  • 2字节是进程id
  • 3字节是计数器
因此,如果MongoDB为集合中的文档选择了一个_id,那么它肯定会与集合中其他文档中的其他_id字段不同


希望这能有所帮助。

让系统选择一个
“系统”,您是指mongoDB服务器还是id生成器API?很遗憾,我不知道系统的哪个组件实际生成了新的ObjectID。例如,我知道如果我在java中插入某个东西,插入的对象会添加一个ObjectID,但我不知道服务器是否会生成OjbectID,如果API生成ObjectID,如果我生成的是随机ObjectID,那么是什么阻止我随机生成一个ObjectID,而MongoDB如果让它自己的设备生成这个ObjectID呢?例如,假设时间戳中的时间字节恰好匹配,mac地址中的字节恰好匹配,进程id中的字节恰好匹配,计数器中的字节恰好与计数器中的字节对应?mongoDB是否注意到这一点,并在分发新的ObjectID时选择不同的ObjectID?嗯。。。不,没有。如果你必须为同一个集合中已经是其他文档id的文档分配一个id,这会给你一个错误。系统自己创建一个重复的id是非常罕见的,几乎不可能的。就您随机生成的_id而言,我认为您无法将您创建的_id与mongodb创建的匹配。