Команда MongoDB shardCollection в Go

Я пытаюсь разбить коллекцию, используя библиотеку mgo в Go. Похоже, я не могу понять, как запускать команды с помощью вызова Session.Run. Вот мой код:

if err := session.DB("admin").Run(bson.D{{"shardCollection", "visits.visits-2016-05"}, {"uuid", "1"}}, &result); err != nil {
    panic(err)
} else {
    fmt.Println(result)
}

Я пробовал несколько вариантов передачи ключевого параметра, но всегда получаю ошибку no shard key

Что я здесь делаю неправильно?


person tchu    schedule 16.03.2016    source источник


Ответы (1)


Я думаю, что проблема, с которой вы столкнулись, заключается в том, что вы должны указать, что второе поле является ключом key, а значение является вложенным документом {uuid: 1}. Таким образом, вы сопоставляете точные поля, перечисленные в документации mongo: https://docs.mongodb.org/manual/reference/command/shardCollection/.

Код, который я использую для того же процесса:

if err := adminDb.Run(
            bson.D{
                {
                    "shardCollection",
                    "logs.log_"+dateString,
                },
                {
                    "key",
                    bson.M{
                        "sk": "hashed",
                    },
                },
            }, &result); err != nil {
                log.Println("Failed to shardCollection logs.log_"+dateString, err)
            }

Так что вы можете попробовать

if err := session.DB("admin").Run(bson.D{{"shardCollection", "visits.visits-2016-05"}, {"key", bson.M{"uuid", "1"}}}, &result); err != nil {
    panic(err)
} else {
    fmt.Println(result)
}
person Verran    schedule 16.03.2016
comment
Это именно то, что я искал - не мог понять, как передать вложенный документ. Кроме того, в моем случае правильным ключевым полем будет {uuid, hashed}, как в вашем примере. - person tchu; 18.03.2016