Как создать коллекцию в совместно используемой пропускной способности cosmosdb с помощью Mongo API - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть база данных Azure CosmosDb с пропускной способностью на уровне базы данных .Мы используем MongoDB API против этого экземпляра Cosmos.Модель общей пропускной способности требует, чтобы во всех коллекциях был задан ключ раздела, что, по-видимому, практически не позволяет инструментам создавать коллекцию, кроме портала Azure или официальных SDK Azure Cosmos.Например, в Robo 3T попытка создать коллекцию приводит к следующей ошибке:

Не удалось создать коллекцию 'mycollection'.

Ошибка: у общей коллекции пропускной способности должен быть разделkey

Та же ошибка возникает при попытке создать коллекцию с помощью mongoose (аналогично this question ) или с помощью других инструментов.

Так что я думаю, что оперативный вопроссводится к следующему: Есть ли способ через API MongoDb передать желаемый ключ ключа в CosmosDb, чтобы создание коллекции было успешным?

1 Ответ

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

Используйте команду shardCollection через db.runCommand (...)

Оказывается, - это рабочий, хотя и неясный, способ добиться этого с помощью проводного протокола MongoDb,Вы можете создать коллекцию с ключом раздела Cosmos (который концептуально сопоставляется с ключом монго Shard), выполнив команду db-level для установки ключа сегментирования для еще не существующей коллекции:

Воболочка mongo:

db.runCommand({shardCollection: "myDbName.nameOfCollectionToCreate", 
               key: {nameOfDesiredPartitionKey: "hashed"}})

После этого моя база данных ComosDb (с общей пропускной способностью на уровне базы данных) теперь содержит новую коллекцию с соответствующим образом установленным ключом раздела!

Я не понялМы пока не можем вызвать runCommand напрямую через Mongoose, но, по крайней мере, этот подход с протоколом native / wire должен работать с любыми официальными драйверами MongoDb, так что он гораздо более переносим, ​​чем использование Azure Cosmos SDK для создания коллекции.

...