MongoEngine - 高级查询
为了更有效地检索文档中的字段子集,请使用 Objects 属性的 only() 方法。 这将显着提高性能,尤其是对于长度非常大的字段,例如 ListField。 将必填字段传递给 only() 函数。 如果执行 only() 查询后访问其他字段,则返回默认值。
from mongoengine import * con=connect('newdb') class person (Document): name=StringField(required=True) city=StringField(default='Mumbai') pin=IntField() p1=person(name='Himanshu', city='Delhi', pin=110012).save() doc=person.objects.only('name').first() print ('name:',doc.name) print ('city:', doc.city) print ('PIN:', doc.pin)
输出
name: Himanshu city: Mumbai PIN: None
注意 − city 属性的值用作默认值。 由于没有为 PIN 指定默认值,因此它打印 None。
如果您需要缺失的字段,您可以调用 reload() 函数。
当文档类具有 ListField 或 DictField 时,在遍历它时,任何 DBREf 对象都会自动取消引用。 为了进一步提高效率,尤其是当文档具有 ReferenceField 时,可以通过使用 select_related() 函数来限制查询的数量,该函数将 QuerySet 转换为列表并影响取消引用。
MongoEngine API 包含 Q 类,可用于构建包含多个约束的高级查询。 Q 表示查询的一部分,可以通过关键字参数语法和二进制 & 和 | 运算符进行初始化。
person.objects(Q(name__startswith=’H’) &Q(city=’Mumbai’))