ComosDB - MongoAPI - Document does not contain shard key
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:
- create the collection via MongoDB, specifying the partition key path separated by dots (e.g.
sender.postCode
) - use the AZ CLI to update it with the desired throughput
In any case, the partitioning always seems to work from Azure's portal.
The $v
prefix mentioned here is no longer present anywhere.
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 (i.e. "/foo")
BTW: This should be working in previous AZ CLI versions (see: https://github.com/Azure/azure-cli/issues/8633)