mongodb查询中返回的同一文档

mongodb查询中返回的同一文档,mongodb,mongodb-query,sharding,Mongodb,Mongodb Query,Sharding,我得到的是mongodb查询返回的相同文档(具有相同的_id) db.getCollection('my-collection').find({ "my_key" : "my_value" }, { _id : 1}).toArray() 返回: [ { "_id" : ObjectId("57d8ea76cee3c6d2299890f2") }, { "_id" : ObjectId("57d7975b5981a0a5f27e260c"

我得到的是mongodb查询返回的相同文档(具有相同的_id)

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

[
    {
        "_id" : ObjectId("57d8ea76cee3c6d2299890f2")
    },
    {
        "_id" : ObjectId("57d7975b5981a0a5f27e260c")
    },
    {
        "_id" : ObjectId("57d8ea76cee3c6d2299890f2")
    }
]
我正试图找出原因,因为它弄乱了我们的一些脚本结果,但找不到原因,也没有在网上提到这一点

我们目前的猜测是,它与切分收集和
切分迁移相关,但如果是这种情况,我会认为这是一个暂时的问题,而这个查询现在会返回一整天的相同文档

注意事项:

  • 使用或不使用
    toArray()
  • 添加
    Projection
    仅为清晰起见,当不使用
    Projection
  • 我们有4个
    碎片
    ,每个碎片运行3台服务器(主服务器、辅助服务器和备份服务器)

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

您可以在这里安全地删除孤立块


使用
\u id
键进行查询时,
mongos
知道要查询哪个碎片,因此在这种情况下,您应该只看到一个结果。但是当使用不同的键进行查询时,查询将在所有碎片上运行,因此您可以看到您看到的结果。

请检查此项,谢谢,但碎片键是_id,并且是唯一的,因此我仍然没有得到最好的答案。