正如标题所描述的那样。当我们有一个mongoengine模型如下:
class Model(Document):
some fields definition~~
我在模型中向数据库添加了一些项目,当我想遍历所有项目时,有三种方法,我应该使用哪些方法?
首先:
for model in Model.objects:
do something to model~~
第二个:
for model in Model.objects():
do something to model~~
第三个:
for model in Model.objects.all():
do something to model~~
似乎这三种方式表现相同~~
答案 0 :(得分:0)
好问题!这是我的意见:
当您想要获取集合中的所有文档时,所有这些都是相似的。所有这些都返回一个可以迭代它的查询集。但是,如果要过滤结果,则应使用 objects()。像这样:
for model in Model.objects(first_name='John', last_name='Doe'):
do something to model~~
ojbects.all()在我看来非常少用,并且由于存在对称的 objects.first()方法而被添加到完整性中。也许在某些情况下,使用 objects.all()是明确的,更具可读性。
如果您想获得一系列文档,可以使用带有对象的数组切片语法,这些语法看起来非常好且可读。
for model in Model.objects[10:20]:
do something to model~~
不使用对象的数组切片语法,确定范围真是太痛苦了:
for model in Model.objects().skip(10).limit(20): # not recommended
do something to model~~
本质上, objects.all()是无用的或用于可读性,对象适用于获取所有文档和/或一系列文档 objects()适用于使用某些过滤器限制返回的文档。
祝你有个美好的一天!