获取MongoDB中共享密钥给定值的分片ID

时间:2019-01-15 10:30:57

标签: mongodb sharding replicaset

我在共享集群中有两个副本集,其中的文档由userId字段分片。

有没有办法查询给定文档中包含的分片(副本集)(通过_id或分片密钥字段),而无需在客户端重新实现共享密钥散列

1 个答案:

答案 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