mongodb 查询中返回相同的文档

same document returned in mongodb query

我正在为 mongodb 查询返回相同的文档(具有相同的 _id)。

db.getCollection('my-collection').find({ "my_key" : "my_value" }, { _id : 1}).toArray()

returns:

[
    {
        "_id" : ObjectId("57d8ea76cee3c6d2299890f2")
    },
    {
        "_id" : ObjectId("57d7975b5981a0a5f27e260c")
    },
    {
        "_id" : ObjectId("57d8ea76cee3c6d2299890f2")
    }
]

我试图找出原因,因为它弄乱了我们的一些脚本结果,但找不到原因,也找不到任何在线提及。

我们目前的猜测是它与具有分片集合和 shard migrations 有关现在一整天的文件。

备注:

_id 始终是唯一的,但它对分片而言是唯一的。如果您有一个分片集合,可能会出现多个具有相同 _id 的文档出现在不同分片中的情况。这可能是由于碎片之间未完成的块迁移操作导致的孤立块造成的。

您可以在此处安全地移除孤立区块 https://docs.mongodb.com/v3.0/reference/command/cleanupOrphaned/

当使用 _id 键查询时,mongos 知道要查询哪个分片,所以在这种情况下你应该只会看到一个结果。但是当使用不同的键查询时,查询在所有分片上都是 运行,所以你可以看到你看到的结果。