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
有关现在一整天的文件。
备注:
- 行为与有无
toArray()
相同
添加 Projection
只是为了清楚起见,不使用 projection
时,相同的完整文档会出现在结果中
- 我们有 4 个
shards
,每个 运行 3 个服务器(主要、次要、备用)
_id
始终是唯一的,但它对分片而言是唯一的。如果您有一个分片集合,可能会出现多个具有相同 _id
的文档出现在不同分片中的情况。这可能是由于碎片之间未完成的块迁移操作导致的孤立块造成的。
您可以在此处安全地移除孤立区块 https://docs.mongodb.com/v3.0/reference/command/cleanupOrphaned/
当使用 _id
键查询时,mongos
知道要查询哪个分片,所以在这种情况下你应该只会看到一个结果。但是当使用不同的键查询时,查询在所有分片上都是 运行,所以你可以看到你看到的结果。
我正在为 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
有关现在一整天的文件。
备注:
- 行为与有无
toArray()
相同
添加 Projection
只是为了清楚起见,不使用projection
时,相同的完整文档会出现在结果中
- 我们有 4 个
shards
,每个 运行 3 个服务器(主要、次要、备用)
_id
始终是唯一的,但它对分片而言是唯一的。如果您有一个分片集合,可能会出现多个具有相同 _id
的文档出现在不同分片中的情况。这可能是由于碎片之间未完成的块迁移操作导致的孤立块造成的。
您可以在此处安全地移除孤立区块 https://docs.mongodb.com/v3.0/reference/command/cleanupOrphaned/
当使用 _id
键查询时,mongos
知道要查询哪个分片,所以在这种情况下你应该只会看到一个结果。但是当使用不同的键查询时,查询在所有分片上都是 运行,所以你可以看到你看到的结果。