看看pymongoext https://github.com/musyoka-morris/pymongoext,它受到猫鼬的高度启发。
主要特点是:
- 无需学习自定义查询语言或 API(如果您知道如何使用 pymongo,那么您已经知道如何使用 pymongoext)
- 类似对象的结果而不是类似字典的结果。这些对象扩展了 dict,因此您可以使用任何一种语法(即 foo.bar 或 foo['bar'])。
- 自定义数据操纵器,用于在保存之前和检索之后转换文档。(灵感来自猫鼬虚拟)
- 模式验证(使用 MongoDB JSON 模式验证)
- 嵌套和复杂的模式声明
- 必填字段验证
- 默认值
- 自定义验证器
- 验证运算符(OneOf、AllOf、AnyOf、Not)
- 索引管理(Pymongoext透明智能地处理MongoDB索引的维护)
示例用法:
from datetime import datetime
from pymongo import MongoClient, IndexModel
from pymongoext import *
class User(Model):
@classmethod
def db(cls):
return MongoClient()['my_database_name']
__schema__ = DictField(dict(
email=StringField(required=True),
name=StringField(required=True),
yob=IntField(minimum=1900, maximum=2019)
))
__indexes__ = [IndexModel('email', unique=True), 'name']
class AgeManipulator(Manipulator):
def transform_outgoing(self, doc, model):
doc['age'] = datetime.now().year - doc['yob']
return doc
# Create a user
>>> User.insert_one({'email': 'jane@gmail.com', 'name': 'Jane Doe', 'yob': 1990})
# Fetch one user
>>> user = User.find_one()
# Print the users age
>>> print(user.age)