我在分片集群中有两个副本集,其中的文档是按userId字段分片的。
有没有办法查询给定文档中包含哪个分片(副本集)(通过_id或分片关键字段),而不需要在客户端重新实现shadring key shard
发布于 2019-01-16 05:10:20
您可以使用查询explain()来标识文档的分片,根据分片键进行查询。
获胜的计划应该有一个SINGLE_SHARD阶段,其中包含一个与下面类似的相等查询(为了清晰起见,需要修剪一些额外的输出):
> db.users.find({userId:123}).explain().queryPlanner.winningPlan
{
"stage" : "SINGLE_SHARD",
"shards" : [
{
"shardName" : "shard01",
"plannerVersion" : 1,
"namespace" : "test.users",
"indexFilterSet" : false,
"parsedQuery" : {
"userId" : {
"$eq" : 123
}
},
}
]
}如果您只需要分片名称,则可以使用JavaScript表示法来引用完整路径:
> db.users.find({userId:123}).explain().queryPlanner.winningPlan.shards[0].shardName
shard01https://stackoverflow.com/questions/54197047
复制相似问题