CosmosDB(以前のDocumentDB)を使用して調査していますが、現在はMongoDBを使用しているため、CosmosDBにMongoAPIを使用しようとしています。
AzureでCosmosDBデプロイメントを作成し、コレクションを作成して、「/ rateId」のパーティションキーを指定しました。
Microsoftのドキュメント から理解できる限り、このパーティションキーは、挿入する各ドキュメントのプロパティに関連している必要があるため、次のような基本的なドキュメントを挿入しようとしています。
{
"rateId": "test.1",
"val": "test2"
}
ただし、これを(Mongo C#ドライバーまたはMongoChefを介して)挿入しようとすると、「ドキュメントにシャードキーが含まれていません」というエラーが表示されます。
私はこれを私が考えることができるあらゆる方法で試しました、そして私がこのエラーで否定されるたびに。これがどのように機能するのか、または何か間違ったことをしているのか誤解していますか?
ドキュメント内 Microsoftは、mongoシェルを介してコレクションを作成するためにこのコマンドを使用すると言います
db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )
これを使用してコレクションを作成しましたが、期待どおりに機能するようになりました(rateIdプロパティを持つドキュメントは「シャードキーがありません」というエラーが発生することなく、OKを挿入します)。
Azure Portalでコレクションを見ると、シャードキーが次のように表示されます。
$v.rateId.$v
ポータルを介してコレクションを作成し、パーティションとして/ rateIdを指定した場合、それは
rateId
少なくとも今は進むことができますが、なぜこのように動作するのか、またはこれが意図されているのか混乱しています(ドキュメントにこの「$ v」形式についての言及はありません)
エスケープ文字で遊ぶことで、azcliを使用してpartition-key-pathを作成する方法を見つけることができました。
AZCLIバージョン2.0.59を使用
$paritionKeyPath = '/''$v''' + $path + '/''$v'''
az cosmosdb collection create .... --partition-key-path $partitionKeyPath
ここで、pathは、スラッシュで始まるドキュメント内のパスです(つまり、「/ foo」)。
ところで:これは以前のAZ CLIバージョンで機能するはずです(参照: https://github.com/Azure/azure-cli/issues/86 )
ここで説明したさまざまな方法でコレクションを作成して、問題を解決しようとしました。私の場合、残念ながら何も助けにはなりませんでした。最終的に私はこのサンプルを変更しました https://github.com/Azure-Samples/Azure-cosmos-db-mongodb-dotnet-getting-started 挿入時にcollectonを自動的に作成しました。
私はここで同じエラーメッセージを表示することになりました。 Azure CosmosDB、MongoDBapi。
Azure CLIを使用してコレクションを作成すると、エラーが発生します。
一方、受け入れられた回答(db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )
)に記載されているコマンドを使用してコレクションを作成すると、エラーはなくなります。
これは、パーティション化されたキーを使用してコレクションをプロビジョニングするには、次のことを行う必要があることを意味します。
sender.postCode
)いずれにせよ、パーティショニングは常にAzureのポータルから機能しているようです。
$v
ここで言及されているプレフィックスは、もはやどこにも存在しません。