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.
3 Réponses :
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>
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/...
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()); }
J'obtiens MongoDB.Driver.MongoCommandException: 'La commande shardCollection a échoué: le partage n'est pas pris en charge pour les collections existantes ..'
.