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

注意 - 使用城市属性的值作为默认值。由于未为 PIN 指定默认值,因此输出 None。

如果需要缺少的字段,可以调用 reload() 函数。

当文档类具有 ListField 或 DictField 时,在对其进行迭代时,所有 DBREf 对象都会自动解除引用。为了进一步提高效率,特别是如果文档有 ReferenceField 的话,可以使用 select_related() 函数限制查询数量,该函数将 QuerySet 转换为列表并执行解除引用。

MongoEngine API 包含 Q 类,其对于构建由多个约束组成的高级查询非常有用。Q 表示可以由关键字参数语法和二元 & 和 | 运算符初始化的查询部分。

person.objects(Q(name__startswith=’H’) &Q(city=’Mumbai’))
广告