我正在调查使用CosmosDB (以前的DocumentDB),我们目前使用MongoDB,所以我尝试使用MongoAPI for CosmosDB。
我在azure中创建了一个CosmosDB部署,创建了一个集合,并指定了一个"/rateId“分区键。
据我从Microsofts文档了解到,这个分区键应该与我插入的每个文档中的一个属性相关,因此我试图插入一个基本文档,如下所示:
{
"rateId": "test.1",
"val": "test2"
}但是,当我尝试插入这个(通过Mongo C#驱动程序或通过MongoChef)时,我得到一个错误“文档不包含切碎键”。

我试过这每一种我能想到的方式,每次我都被这个错误所拒绝。我是误解了这是怎么回事,还是做错了什么?
发布于 2017-08-09 10:48:15
在文件中 Microsoft说使用此命令通过mongo创建集合。
db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )我用它来创建一个集合,现在它按预期的方式工作(带有rateId属性的文档插入ok,而没有得到"no键“错误)。
当查看Azure Portal中的集合时,它将碎片键显示为
$v.rateId.$v然而,当我通过门户创建集合并将/rateId指定为分区时,它显示为
rateId至少我现在可以取得进展,但我不明白为什么它会这样做,或者它是否应该是这样的(我看不出文档中提到过这种"$v“格式)。
发布于 2019-02-28 10:54:14
通过使用转义字符,我设法找到了如何使用az cli编写分区键路径。
使用AZ CLI版本2.0.59
$paritionKeyPath = '/''$v''' + $path + '/''$v'''
az cosmosdb collection create .... --partition-key-path $partitionKeyPath路径是文档中以斜杠开头的路径(即"/foo")
顺便说一句:这应该适用于以前的AZ版本(参见:https://github.com/Azure/azure-cli/issues/8633)
发布于 2019-04-01 14:41:31
最后我也收到了同样的错误信息。Azure CosmosDB,MongoDB api.
如果我使用Azure CLI创建集合,则会得到错误。
另一方面,如果我使用接受答案(db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } ) )中提到的命令创建集合,那么错误就消失了。
这意味着,为了提供带有分区密钥的集合,我需要:
sender.postCode)无论如何,分区似乎总是在Azure的门户上工作。
这里提到的$v前缀在任何地方都不再存在。
https://stackoverflow.com/questions/45587691
复制相似问题