Mongoengine 简明教程
MongoEngine - Advanced Queries
为了提高在文档中检索字段子集的效率,请使用 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)
Output
name: Himanshu
city: Mumbai
PIN: None
Note − 使用 city 属性的值作为默认值。由于未为 PIN 指定默认值,因此打印 None。
如果您需要丢失的字段,可以调用 reload() 函数。
当文档类具有 ListField 或 DictField 时,在对其进行迭代时,任何 DBREf 对象都会自动取消引用。为了进一步提高效率,特别是如果文档具有 ReferenceField,可以使用 select_related() 函数对查询数量进行限制,该函数会将 QuerySet 转换为列表并取消引用。
MongoEngine API 包含 Q 类,该类可用于构建由多个约束条件组成的复杂查询。Q 表示查询的一部分,该部分可以通过关键字参数语法和二进制 & 和 | 运算符来初始化。
person.objects(Q(name__startswith=’H’) &Q(city=’Mumbai’))