Aks*_*hay 4 python azure azure-cosmosdb azure-cosmosdb-mongoapi
我创建了一个使用 MongoDB 的 Python SDK 的 CosmosDB 数据库,我们将数据库称为 ,school将集合称为students。在创建数据库时,Azure UI 要求我创建一个用于无限存储容量的分片键,我们称之为school.students。
我用来pymongo添加以下文档:
{
  "id": "abc123",
  "name": "jack"
}
Run Code Online (Sandbox Code Playgroud)
代码如下:
{
  "id": "abc123",
  "name": "jack"
}
Run Code Online (Sandbox Code Playgroud)
当我选择 10GB 存储时,添加文档没有问题,但是当我选择带分片键的无限选项时,出现以下错误:
pymongo.errors.WriteError: document does not contain shard key at 'school.students'
Run Code Online (Sandbox Code Playgroud)
问题是,我应该在哪里使用分片键?以及如何克服这个问题?
MongoDB 中的Ashard key映射到partition keyCosmos DB 中的 a。创建集合时,如果您通过门户创建集合,系统会要求您指定分区键。或者,您可以通过 MongoDB 的命令行工具或通过代码指定分片键(此时称为分片键)。该分片键必须存在于您的文档中。
在您的情况下,您的文档仅包含id和name(您可以使用其中任何一个作为您的分片键)。或者,您可以指定一个附加属性作为您的分片键。例如,也许schoolid:
student_data = {
  "id": "abc123",
  "name": "jack",
  "schoolid": "school1" 
}
Run Code Online (Sandbox Code Playgroud)
创建集合时,您需要指定schoolid为分区键。此时,您的文档保存将起作用,因为您的文档中将包含一个分片键(分区键)。
在原始示例中,您指定school.students为分片键。这需要您有一个名为的属性school和一个名为的子属性students(我猜这样做没有太大意义):
student_data = {
  "id": "abc123",
  "name": "jack",
  "school": {
     "students": ...
  }
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           10660 次  |  
        
|   最近记录:  |