Pymongo是否内置验证规则?

omr*_*hur 1 validation mongodb pymongo

我正在尝试根据模式验证插入的文档,并试图找到一种方法来验证插入的文档。

MongoEngine这样的图书馆说他们在做这项工作,但是有没有办法直接通过进行文件验证pymongo

Buz*_*tti 8

python驱动程序文档确实对如何使用db.command。这是一个完整的工作示例:

from pymongo import MongoClient
from collections import OrderedDict
import sys

client = MongoClient()   # supply connection args as appropriate 
db = client.testX

db.myColl.drop()

db.create_collection("myColl")  # Force create!

#  $jsonSchema expression type is prefered.  New since v3.6 (2017):
vexpr = {"$jsonSchema":
  {
         "bsonType": "object",
         "required": [ "name", "year", "major", "gpa" ],
         "properties": {
            "name": {
               "bsonType": "string",
               "description": "must be a string and is required"
            },
            "gender": {
               "bsonType": "string",
               "description": "must be a string and is not required"
            },
            "year": {
               "bsonType": "int",
               "minimum": 2017,
               "maximum": 3017,
               "exclusiveMaximum": False,
               "description": "must be an integer in [ 2017, 3017 ] and is required"
            },
            "major": {
               "enum": [ "Math", "English", "Computer Science", "History", None ],
               "description": "can only be one of the enum values and is required"
            },
            "gpa": {
               "bsonType": [ "double" ],
               "minimum": 0,
               "description": "must be a double and is required"
            }
         }
  }
}

query = [('collMod', 'myColl'),
        ('validator', vexpr),
        ('validationLevel', 'moderate')]
query = OrderedDict(query)
db.command(query)

try:
    db.myColl.insert({"x":1})
    print "NOT good; the insert above should have failed."
except:
    print "OK. Expected exception:", sys.exc_info()    

try:
    okdoc = {"name":"buzz", "year":2019, "major":"Math", "gpa":3.8}
    db.myColl.insert(okdoc)
    print "All good."
except:
    print "exc:", sys.exc_info()    
Run Code Online (Sandbox Code Playgroud)


Buz*_*tti 1

MongoDB 支持引擎级别的文档验证,因此您可以通过 pymongo 选择它。您向引擎声明您的“模式”(实际上是规则)。这是一个很好的起点: https ://docs.mongodb.com/manual/core/document-validation/