用于MongoDB API的Shard key和Azure cosmsdb

2024-05-13 00:55:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个使用MongoDB的pythonsdk的cosmsdb数据库,让我们将数据库称为school,将集合称为students。在创建数据库时,azureui要求我为无限存储容量创建一个shard key,我们称之为school.students。在

我使用pymongo添加以下文档:

{
  "id": "abc123",
  "name": "jack"
}

代码为:

^{pr2}$

当我选择10GB的存储时,添加文档没有问题,但是当我选择带有shard key的unlimited选项时,我得到了以下错误:

pymongo.errors.WriteError: document does not contain shard key at 'school.students'

问题是,我应该在哪里使用碎片密钥?如何克服这一切?在


Tags: keyname文档id数据库mongodb存储容量shard
2条回答

MongoDB中的shard key映射到Cosmos DB中的partition key。创建集合时,如果是通过门户创建的,则会要求您指定分区键。或者您可以通过MongoDB的命令行工具或代码指定shard key(在这里它被称为shard key)。该碎片密钥必须存在于您的文档中。在

在您的例子中,您的文档只包含id和{}(您可以使用其中任何一个作为切分密钥)。或者,可以指定一个附加属性作为切分密钥。例如,schoolid

student_data = {
  "id": "abc123",
  "name": "jack",
  "schoolid": "school1" 
}

创建集合时,应指定schoolid作为分区键。此时,您的文档保存就可以工作了,因为您的文档中将包含一个碎片密钥(分区密钥)。在

在原始示例中,您指定了school.students作为切分键。这就需要您拥有一个名为school的属性和一个名为students的子属性(我猜这没什么意义):

^{pr2}$

您可以通过mongoshell创建集合

db.runCommand( { shardCollection: "myDb.students", key: { id: "hashed" } } )

相关问题 更多 >