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 用法的正确文档,所以让我知道。