2
votes

Azure Cosmos MongoDB - Créer une collection avec une clé de partition

J'ai besoin de créer une collection dans Cosmos MongoDB d'Azure, mais avec une clé de partition / partition, la configuration requise est que la base de données aura un débit provisionné (une quantité définie de RU) et les collections qu'elle contient auront un débit partagé .

L'API du cluster est définie sur Cosmos DB Mongo API - Si je crée la collection dans le cosmos, je n'ai aucun problème avec Insérer / Supprimer, mais si je crée la collection en utilisant le code ci-dessous, je obtiendra une erreur indiquant {"L'insertion de la commande a échoué: le document ne contient pas de clé de partition."} même si l'affichage de la collection effectuée dans le portail et dans le code semble identique.

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

J'ai parlé à un représentant Microsoft mais je reçois des «réponses» manquantes. Il a conseillé d'utiliser Mongo CSharp Driver mais il semble que ce pilote ne soit pas en mesure de définir une clé de partition (ce qui est logique).

Comment puis-je créer une collection avec une clé de partition?

Merci.


0 commentaires

3 Réponses :


0
votes

Je suppose que vous devez le faire via la commande via le shell mongo

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

Reportez-vous ici pour plus de détails

p>


2 commentaires

Je sais que c'est possible via mongo shell mais je veux le faire dans le code pas dans le shell


essayez ce code github.com/Azure/azure-cosmos-dotnet-v3/blob/...



2
votes

J'avais affaire à la même chose. Lorsque vous utilisez le pilote MongoDB csharp, vous ne devez pas appeler db.CreateCollection, mais utiliser la commande de partitionnement à la place. Cela créera votre collection illimitée avec la clé de partition pour vous.

//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());
}


1 commentaires

J'obtiens MongoDB.Driver.MongoCommandException: 'La commande shardCollection a échoué: le partage n'est pas pris en charge pour les collections existantes ..' .