mongodb查询中返回的同一文档
我得到的是mongodb查询返回的相同文档(具有相同的_id)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"
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,并且是唯一的,因此我仍然没有得到最好的答案。