![](/img/trans.png)
[英]MongoDb C# Driver Resolving Command insert failed: document does not contain shard key
[英]ComosDB - MongoAPI - Document does not contain shard key
我正在使用CosmosDB(以前是DocumentDB)进行调查,我们目前使用MongoDB,因此我试图将MongoAPI用于CosmosDB。
我已经在azure中创建了一个CosmosDB部署,创建了一个集合,并指定了“ / rateId”分区键。
据我从Microsoft的文档可以理解,此分区键应与我插入的每个文档中的一个属性有关,因此我尝试插入一个基本文档,如下所示:
{
"rateId": "test.1",
"val": "test2"
}
但是,当我尝试插入此文件(通过Mongo C#驱动程序或通过MongoChef)时,出现错误“文档不包含分片键”。
我已经尽我所能地尝试了此方法,并且每次都因该错误而被拒绝。 我是在误解这是怎么工作的,还是做错了什么?
微软在文档中说使用此命令通过mongo shell创建集合
db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )
我用它来创建一个集合,它现在可以按预期的方式工作(具有rateId属性的文档插入ok,而没有得到“ no shard key”错误)。
在Azure门户中查看集合时,分片密钥显示为
$v.rateId.$v
而当我通过门户网站创建集合并指定/ rateId作为分区时,它显示为
rateId
至少我现在可以进步了,但是我很困惑为什么它会这样运行,或者这就是它的原意(我在文档中看不到这种“ $ v”格式的提及)
通过玩转义字符,我设法找到了如何使用az cli编写partition-key-path的方法。
二手AZ CLI版本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/8633 )
我在这里结束了同样的错误消息。 Azure CosmosDB,MongoDB api
如果使用Azure CLI创建集合,则会收到错误消息。
另一方面,如果我使用接受的答案中提到的命令来创建集合( db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )
),则错误消失了。
这意味着为了为集合提供分区键,我需要:
sender.postCode
) 无论如何,该分区似乎总是可以从Azure的门户进行工作。
这里提到的$v
前缀不再出现在任何地方。
我试图通过创建这里提到的其他方式来解决这个问题。 就我而言,不幸的是没有任何帮助。 最终,我修改了此样本https://github.com/Azure-Samples/azure-cosmos-db-mongodb-dotnet-getting-started ,该样本在插入时自动创建了collecton。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.