Pymongo.db.create_collection 与验证器 returns 'unknown operator: $jsonSchema'
Pymongo.db.create_collection with validator returns 'unknown operator: $jsonSchema'
我正在尝试为我的 mongoDB
数据库创建一个架构,以确保数据库中的数据格式。
如果数据库未初始化,我正在使用 pymongo
确保应用程序启动时在我的 docker 容器中发生这种情况。
self.client = MongoClient(conn_string)
self.db = self.client[db_name]
# ...
# I am looping over in my json and 'stuff' is the collection name
# and json['stuff'] is the schema, so:
# collection = 'stuff'
# schema = json[collection]
# ...
self.db.create_collection(collection, validator= { "validator": { "$jsonSchema": schema} })
架构看起来像那样,并且是从 json
文件加载的。 (和那项工作)
{
"stuff": {
"bsonType": "object",
"required": [ "sid", "name", "url" ],
"properties": {
"sid": {
"bsonType": "string",
"pattern": "^[a-z_]{3-20}$",
"description": "must be a string 3-20 lowercase chars and is required"
},
"name": {
"bsonType": "string",
"minLength": 2,
"maxLength": 30,
"description": "must be a string 2-30 chars and is required"
},
"url": {
// etc.
}
}
}
}
但是我得到这个错误:
pymongo.errors.OperationFailure: unknown operator: $jsonSchema, full error:
{'ok': 0.0, 'errmsg': 'unknown operator: $jsonSchema', 'code': 2, 'codeName': 'BadValue'}
所以我找到了答案,也感谢@prasad_评论:
问题是语法错误这里是坏的和好的版本并排:
# Bad version :
self.db.create_collection(collection, validator= { "validator": { "$jsonSchema": schema} })
# Good version :
self.db.create_collection(collection, validator= { "$jsonSchema": schema})
所以因为验证器是作为参数传递的,所以它不应该在内部命名,只有 $jsonSchema
我希望它能帮助一些人,很难找到关于 pymongo 用法的正确文档,所以让我知道。
我正在尝试为我的 mongoDB
数据库创建一个架构,以确保数据库中的数据格式。
如果数据库未初始化,我正在使用 pymongo
确保应用程序启动时在我的 docker 容器中发生这种情况。
self.client = MongoClient(conn_string)
self.db = self.client[db_name]
# ...
# I am looping over in my json and 'stuff' is the collection name
# and json['stuff'] is the schema, so:
# collection = 'stuff'
# schema = json[collection]
# ...
self.db.create_collection(collection, validator= { "validator": { "$jsonSchema": schema} })
架构看起来像那样,并且是从 json
文件加载的。 (和那项工作)
{
"stuff": {
"bsonType": "object",
"required": [ "sid", "name", "url" ],
"properties": {
"sid": {
"bsonType": "string",
"pattern": "^[a-z_]{3-20}$",
"description": "must be a string 3-20 lowercase chars and is required"
},
"name": {
"bsonType": "string",
"minLength": 2,
"maxLength": 30,
"description": "must be a string 2-30 chars and is required"
},
"url": {
// etc.
}
}
}
}
但是我得到这个错误:
pymongo.errors.OperationFailure: unknown operator: $jsonSchema, full error:
{'ok': 0.0, 'errmsg': 'unknown operator: $jsonSchema', 'code': 2, 'codeName': 'BadValue'}
所以我找到了答案,也感谢@prasad_评论: 问题是语法错误这里是坏的和好的版本并排:
# Bad version :
self.db.create_collection(collection, validator= { "validator": { "$jsonSchema": schema} })
# Good version :
self.db.create_collection(collection, validator= { "$jsonSchema": schema})
所以因为验证器是作为参数传递的,所以它不应该在内部命名,只有 $jsonSchema
我希望它能帮助一些人,很难找到关于 pymongo 用法的正确文档,所以让我知道。