首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shard键和Azure CosmosDB for MongoDB API

Shard键和Azure CosmosDB for MongoDB API
EN

Stack Overflow用户
提问于 2019-11-09 06:32:29
回答 2查看 7.6K关注 0票数 3

我创建了一个使用MongoDB的Python的CosmosDB数据库,让我们将数据库称为school,将集合称为students。在创建数据库时,Azure要求我为无限制的存储容量创建一个碎片密钥,我们称之为school.students

我使用pymongo添加以下文档:

代码语言:javascript
复制
{
  "id": "abc123",
  "name": "jack"
}

守则如下:

代码语言:javascript
复制
from pymongo import MongoClient

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

client = MongoClient("mongodb://...")
db = client["school"]
collection = db["students"]
collection.insert_one(student_data)

当我选择10 get的存储时,添加文档是没有问题的,但是当我选择了带有shard键的无限选项时,我会得到以下错误:

代码语言:javascript
复制
pymongo.errors.WriteError: document does not contain shard key at 'school.students'

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-09 13:33:14

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

在您的示例中,您的文档只包含idname (您可以使用其中的任何一个作为切分键)。或者,您可以指定一个附加属性作为您的碎片键。例如,也许是schoolid

代码语言:javascript
复制
student_data = {
  "id": "abc123",
  "name": "jack",
  "schoolid": "school1" 
}

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

在您的原始示例中,您将school.students指定为您的碎片键。这需要您拥有一个名为school的属性和一个名为students的子属性(我猜这样做没有多大意义):

代码语言:javascript
复制
student_data = {
  "id": "abc123",
  "name": "jack",
  "school": {
     "students": ...
  }
}
票数 5
EN

Stack Overflow用户

发布于 2019-11-09 06:53:18

您可以通过mongo创建集合。

代码语言:javascript
复制
db.runCommand( { shardCollection: "myDb.students", key: { id: "hashed" } } )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58776987

复制
相关文章

相似问题

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