I am investigating using CosmosDB (previously DocumentDB), we currently use MongoDB so I am trying to use the MongoAPI for CosmosDB.
I have created a CosmosDB deployment in azure, created a collection and specified a partition key of "/rateId".
As far as I can understand from Microsofts documentation this partition key should relate to a property in each document I insert, so I am trying to insert a basic document like so:
{
"rateId": "test.1",
"val": "test2"
}
However when I try to insert this (through Mongo C# driver or through MongoChef) I get an error "document does not contain shard key".
I have tried this every which way I can think of and every time I am denied with this error. Am I misunderstanding how this is meant to work, or doing something wrong?
In the documentation Microsoft say to use this command for creating a collection through the mongo shell
db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )
I used that to create a collection and it now works as expected (docs with a rateId property insert ok, without I get the "no shard key" error).
When looking at the collection in the Azure Portal it shows the shard key as
$v.rateId.$v
Whereas when I created the collection through the portal and specified /rateId as the partition, it showed it as just
rateId
At least I can progress now, but I'm confused why it behaves this way or if this is how it's meant to be (I can't see any mention of this "$v" format on the documentation)
By playing with escape chars I managed to find out how to write partition-key-path using az cli
Used AZ CLI Version 2.0.59
$paritionKeyPath = '/''$v''' + $path + '/''$v'''
az cosmosdb collection create .... --partition-key-path $partitionKeyPath
Where path is Your path in document starting with slash (ie "/foo")
BTW: This should be working in previous AZ CLI versions (see: https://github.com/Azure/azure-cli/issues/8633 )
I ended up here with the same error message. Azure CosmosDB, MongoDB api.
If I create the collection with the Azure CLI, I get the error.
If on the other hand I create the collection with the command mentioned in the accepted answer ( db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )
) then the error goes away.
This means that in order to provision a collection with a partitioned key, I need to:
sender.postCode
) In any case, the partitioning always seems to work from Azure's portal.
The $v
prefix mentioned here is no longer present anywhere.
I tried to fix the problem by creating a collection different ways mentioned here. In my case nothing helped me unfortunately. Eventually I modified this sample https://github.com/Azure-Samples/azure-cosmos-db-mongodb-dotnet-getting-started which created collecton automatically on insert.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.