_id 上的重复文档(在 mongo 中)

kla*_*o z 5 duplicates mongodb

我有一个分片的 mongo 集合,有超过 150 万个文档。我使用 _id 列作为分片键,该列中的值是整数(而不是 ObjectIds)。

我使用 Perl 驱动程序(插入、更新、删除、保存)和 mongoimport 在这个集合上做了很多写操作。

我的问题是,不知何故,我在同一个 _id 上有重复的文档。从我读过的内容来看,这应该是不可能的。

我已经删除了重复项,但其他人仍然出现。

你有什么想法可能来自哪里,或者我应该开始看什么?(此外,我尝试在较小的测试集合上复制它,但无论我执行什么写操作,都不会插入重复项)。

Ste*_*nie 4

这其实不是Perl驱动的问题..它与分片的特性有关。MongoDB 只能在创建时强制位于单个分片上的文档之间的唯一性,因此默认索引不需要唯一性。

MongoDB:配置分片文档中特别提到:

  • 对集合进行分片时,必须指定分片键。如果集合中有数据,mongo将要求预先创建一个索引(它加速分块过程);否则,系统会自动为您创建索引。

  • 您可以使用 {unique: true} 选项来确保底层索引强制执行唯一性,只要唯一索引是分片键的前缀即可。

  • 如果不使用“unique: true”选项,则分片键不必是唯一的。