Получить идентификатор шарда для заданного значения ключа шардинга в mongodb - PullRequest
0 голосов
/ 15 января 2019

У меня есть два набора реплик в кластере сегментирования с документами, экранированными в поле userId.

Есть ли способ запросить, какой осколок (набор реплик) связывается с данным документом (с помощью _id или поданного ключа шардирования) без повторного повторного хеширования ключа шейдинга на стороне клиента

1 Ответ

0 голосов
/ 16 января 2019

Вы можете использовать запрос 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
...