我在共享集群中有两个副本集,其中的文档由userId
字段分片。
有没有办法查询给定文档中包含的分片(副本集)(通过_id
或分片密钥字段),而无需在客户端重新实现共享密钥散列
答案 0 :(得分:1)
您可以使用查询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
shard01