mongoengine中的Model.objects、Model.objects()、Model.objects.all()有什么区别?

What's the differenct among Model.objects, Model.objects(), and Model.objects.all() in mongoengine?

正如标题described.When我们有一个mongoengine模型如下: class Model(Document): some fields definition~~ 而我通过Model向数据库中添加了一些item,当我想遍历所有item时,有3种方式,我应该使用哪种? 首先: 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~~

看来三种方式表现一样~~

好问题!这是我的看法:

当您想要获取集合中的所有文档时,它们都是相似的。所有这些 return 一个您可以对其进行迭代的查询集。但是,如果你想过滤结果,你应该使用 objects()。像这样:

for model in Model.objects(first_name='John', last_name='Doe'):
    do something to model~~

ojbects.all() 在我看来没什么用,添加到完整性中是因为有一个对称的 objects.first() 方法。也许在某些情况下,使用 objects.all() 是明确的且更具可读性。

如果您想获得一系列文档,您可以将数组切片语法与 objects 一起使用,这看起来非常好并且可读。

for model in Model.objects[10:20]:
    do something to model~~

如果不对 objects 使用数组切片语法,确定范围真的很痛苦:

for model in Model.objects().skip(10).limit(20):  # not recommended
    do something to model~~

本质上,objects.all()是无用的或用于可读性,objects有利于获取所有文档和/或一系列文档和 objects() 适用于使用某些过滤器限制 returned 文档。

祝你有个愉快的一天!