Azure Cosmos MongoDB - Создать коллекцию с ключом осколка - PullRequest
0 голосов
/ 20 января 2019

Мне нужно создать коллекцию в Cosmos MongoDB Azure, но с ключом раздела / шарда, поскольку необходимая конфигурация состоит в том, что база данных будет иметь подготовленную пропускную способность (установленное количество RU), а коллекции в ней будут иметь общую пропускную способность. .

API кластера установлен на Cosmos DB Mongo API - если я создаю коллекцию в космосе, у меня не возникает проблем со вставкой / удалением, но если я создаю коллекцию с использованием приведенного ниже кода, я получу сообщение об ошибке {"Command insert failed: document does not contain shard key."} даже хотя просмотр коллекции, сделанной на портале и в коде, выглядит одинаково.

client.CreateDocumentCollectionAsync(database.SelfLink,
new DocumentCollection
{
    Id = "CollectionName",
    PartitionKey = new PartitionKeyDefinition { Paths = new Collection<string> { "/_id" } }
}).Wait();

Я разговаривал с представителем Microsoft, но мне не хватает «ответов». Он посоветовал использовать Mongo CSharp Driver, но, похоже, этот драйвер не может определить ключ раздела (что имеет смысл).

Как создать коллекцию с ключом раздела?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я имел дело с тем же. При использовании драйвера MongoDB csharp вы не должны вызывать db.CreateCollection, а вместо этого использовать команду sharding. Это создаст вашу неограниченную коллекцию с ключом раздела для вас.

//Sharded collection must be initialized this way
var bson = new BsonDocument
{
    { "shardCollection", mongoClientProvider.DatabaseName + "." + CollectionName },
    { "key", new BsonDocument(ShardKeyName, "hashed") }
};

var shellCommand = new BsonDocumentCommand<BsonDocument>(bson);

try
{
    var commandResult = database.RunCommand(shellCommand);
}
catch (MongoCommandException ex)
{
    logger.LogError(ex, ex.Result.ToString());
}
0 голосов
/ 20 января 2019

Полагаю, вам нужно сделать это с помощью команды через оболочку Монго

db.runCommand( { shardCollection: "yourCollection", key: { rateId: "_id" } } )

См. here подробнее ...

...