我想通过他们的“外键”(userID)而不是他们的 id 字段来分片集合。我只需要 userID 和 id 的组合是唯一的。但我不确定 mongodb 是否可以。
警告在您不按 _id 字段分片的任何分片集合中,您必须确保 _id 字段的唯一性。确保 _id 始终唯一的最佳方法是使用 ObjectId 或其他通用唯一标识符 (UUID)。
我必须确保 _id 是唯一的吗?或者如果我总是通过 userID 和 _id 查询就足够了吗?
我想通过他们的“外键”(userID)而不是他们的 id 字段来分片集合。我只需要 userID 和 id 的组合是唯一的。但我不确定 mongodb 是否可以。
警告在您不按 _id 字段分片的任何分片集合中,您必须确保 _id 字段的唯一性。确保 _id 始终唯一的最佳方法是使用 ObjectId 或其他通用唯一标识符 (UUID)。
我必须确保 _id 是唯一的吗?或者如果我总是通过 userID 和 _id 查询就足够了吗?
除非您手动替换它们,否则自动生成的 _id 是 UUID,根据文档,它由“4 字节时间戳(自纪元以来的秒数)、3 字节机器 ID、2 字节进程 ID 和3 字节计数器”。
如您所见,唯一的机器 ID 是 UUID 的一部分。这确保了分片中没有两台机器独立创建相同的 UUID(除非它们具有相同的机器 ID - 可能性为 1:16777215 并且当它发生时可以很容易地验证)。理论上你可以拥有重复 UUID 的唯一情况是单个进程在一秒钟内创建超过 2^24(超过 1600 万)个 UUID。
tl; dr:您不必担心重复的 UUID - 正如文档所述,它们“设计为在分配时具有相当高的唯一性”。