我创建了一个使用MongoDB的Python的CosmosDB数据库,让我们将数据库称为school,将集合称为students。在创建数据库时,Azure要求我为无限制的存储容量创建一个碎片密钥,我们称之为school.students。
我使用pymongo添加以下文档:
{
"id": "abc123",
"name": "jack"
}守则如下:
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键的无限选项时,我会得到以下错误:
pymongo.errors.WriteError: document does not contain shard key at 'school.students'问题是,我应该在哪里使用碎片钥匙?以及如何克服这一切?
发布于 2019-11-09 13:33:14
shard key in MongoDB映射到Cosmos DB中的partition key。创建集合时,如果通过门户创建分区键,则要求指定分区键。或者您可以通过MongoDB的命令行工具或代码指定shard键(然后将其称为shard键)。该碎片密钥必须存在于您的文档中。
在您的示例中,您的文档只包含id和name (您可以使用其中的任何一个作为切分键)。或者,您可以指定一个附加属性作为您的碎片键。例如,也许是schoolid
student_data = {
"id": "abc123",
"name": "jack",
"schoolid": "school1"
}在创建集合时,应该指定schoolid作为分区键。此时,您的文档保存将工作,因为您将在文档中包含一个碎片键(分区键)。
在您的原始示例中,您将school.students指定为您的碎片键。这需要您拥有一个名为school的属性和一个名为students的子属性(我猜这样做没有多大意义):
student_data = {
"id": "abc123",
"name": "jack",
"school": {
"students": ...
}
}发布于 2019-11-09 06:53:18
您可以通过mongo创建集合。
db.runCommand( { shardCollection: "myDb.students", key: { id: "hashed" } } )https://stackoverflow.com/questions/58776987
复制相似问题