首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComosDB - MongoAPI -文档不包含shard键。

ComosDB - MongoAPI -文档不包含shard键。
EN

Stack Overflow用户
提问于 2017-08-09 10:10:24
回答 5查看 11.4K关注 0票数 11

我正在调查使用CosmosDB (以前的DocumentDB),我们目前使用MongoDB,所以我尝试使用MongoAPI for CosmosDB。

我在azure中创建了一个CosmosDB部署,创建了一个集合,并指定了一个"/rateId“分区键。

据我从Microsofts文档了解到,这个分区键应该与我插入的每个文档中的一个属性相关,因此我试图插入一个基本文档,如下所示:

代码语言:javascript
复制
{
    "rateId": "test.1",
    "val": "test2"
}

但是,当我尝试插入这个(通过Mongo C#驱动程序或通过MongoChef)时,我得到一个错误“文档不包含切碎键”。

我试过这每一种我能想到的方式,每次我都被这个错误所拒绝。我是误解了这是怎么回事,还是做错了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-09 10:48:15

在文件中 Microsoft说使用此命令通过mongo创建集合。

代码语言:javascript
复制
db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } )

我用它来创建一个集合,现在它按预期的方式工作(带有rateId属性的文档插入ok,而没有得到"no键“错误)。

当查看Azure Portal中的集合时,它将碎片键显示为

代码语言:javascript
复制
$v.rateId.$v

然而,当我通过门户创建集合并将/rateId指定为分区时,它显示为

代码语言:javascript
复制
rateId

至少我现在可以取得进展,但我不明白为什么它会这样做,或者它是否应该是这样的(我看不出文档中提到过这种"$v“格式)。

票数 4
EN

Stack Overflow用户

发布于 2019-02-28 10:54:14

通过使用转义字符,我设法找到了如何使用az cli编写分区键路径。

使用AZ CLI版本2.0.59

代码语言:javascript
复制
$paritionKeyPath = '/''$v''' + $path + '/''$v'''
az cosmosdb collection create .... --partition-key-path $partitionKeyPath

路径是文档中以斜杠开头的路径(即"/foo")

顺便说一句:这应该适用于以前的AZ版本(参见:https://github.com/Azure/azure-cli/issues/8633)

票数 1
EN

Stack Overflow用户

发布于 2019-04-01 14:41:31

最后我也收到了同样的错误信息。Azure CosmosDB,MongoDB api.

如果我使用Azure CLI创建集合,则会得到错误。

另一方面,如果我使用接受答案(db.runCommand( { shardCollection: "myDb.myCollection", key: { rateId: "hashed" } } ) )中提到的命令创建集合,那么错误就消失了。

这意味着,为了提供带有分区密钥的集合,我需要:

  1. 通过MongoDB创建集合,指定由点分隔的分区密钥路径(例如,sender.postCode)
  2. 使用AZ以所需的吞吐量更新它。

无论如何,分区似乎总是在Azure的门户上工作。

这里提到的$v前缀在任何地方都不再存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45587691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档