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_lated()函数来限制查询数量,该函数将QuerySet转换为列表并实现取消引用。

MongoEngine API 包含 Q 类,可用于构建由多个约束组成的高级查询。Q 表示查询的一部分,可以通过关键字参数语法和二进制 & 和 | 来初始化。运营商。

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