mongoengine中Model.objects,Model.objects()和Model.objects.all()之间的区别是什么?

时间:2017-08-28 16:00:12

标签: python mongodb orm mongoengine database

正如标题所描述的那样。当我们有一个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~~

似乎这三种方式表现相同~~

1 个答案:

答案 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()适用于使用某些过滤器限制返回的文档。

祝你有个美好的一天!