- Mongo引擎教程
- MongoEngine - 主页
- MongoEngine——MongoDB
- MongoEngine - MongoDB 指南针
- MongoEngine - 对象文档映射器
- MongoEngine - 安装
- MongoEngine - 连接到 MongoDB 数据库
- MongoEngine - 文档类
- MongoEngine - 动态模式
- MongoEngine - 字段
- MongoEngine - 添加/删除文档
- MongoEngine - 查询数据库
- MongoEngine - 过滤器
- MongoEngine - 查询运算符
- MongoEngine - 查询集方法
- MongoEngine - 排序
- MongoEngine - 自定义查询集
- MongoEngine - 索引
- MongoEngine - 聚合
- MongoEngine - 高级查询
- MongoEngine - 文档继承
- MongoEngine - 原子更新
- MongoEngine-Javascript
- MongoEngine-GridFS
- MongoEngine - 信号
- MongoEngine - 文本搜索
- MongoEngine - 扩展
- MongoEngine 有用资源
- MongoEngine - 快速指南
- MongoEngine - 有用的资源
- MongoEngine - 讨论
MongoEngine - 自定义查询集
默认情况下,文档类上的对象属性返回一个查询集,而不应用任何过滤器。但是,您可以在修改查询集的文档上定义类方法。这样的方法应该接受两个参数 - doc_cls 和 queryset,并且需要用 queryset_manager() 进行修饰才能被识别。
@queryset_manager def qry_method(docs_cls,queryset): …. ----
在下面的示例中,名为 products 的文档类具有一个 由 @queryset_manager 修饰的昂贵_prods() 方法。该方法本身对查询集应用过滤器,以便仅返回价格 >20000 的对象。此方法现在是默认文档查询,产品类的对象属性返回过滤后的文档。
from mongoengine import * con=connect('newdb') class products (Document): ProductID=IntField(required=True) company=StringField() Name=StringField() price=IntField() @queryset_manager def expensive_prods(docs_cls,queryset): return queryset.filter(price__gt=20000) for product in products.expensive_prods(): print ("Name:{} company:{} price:{}".format(product.Name, product.company, product.price))
输出
Name:Laptop company:Acer price:25000 Name:TV company:Samsung price:50000 Name:TV company:Philips price:31000 Name:Laptop company:Dell price:45000
如果您希望自定义过滤文档的方法,请首先声明 QuerySet 类的子类,并将其用作元字典中的 queryset_class 属性的值。
下面的示例使用 MyQuerySet 类作为自定义查询集的定义。此类中的 myqrymethod() 过滤名称字段以“er”结尾的文档。在products类中,meta属性指的是该queryset子类用作queryset_class属性的值。
from mongoengine import * con=connect('newdb') class MyQuerySet(QuerySet): def myqrymethod(self): return self.filter(Name__endswith='er') class products (Document): meta = {'queryset_class': MyQuerySet} ProductID=IntField(required=True) company=StringField() Name=StringField() price=IntField() for product in products.objects.myqrymethod(): print ("Name:{} company:{} price:{}".format(product.Name, product.company, product.price))
输出
Name:Router company:Iball price:2000 Name:Scanner company:Cannon price:5000 Name:Printer company:Cannon price:12500