小编yun*_*liu的帖子

Mongoengine中的"QuerySet"对象究竟是什么?

根据Mongoengine API指南(http://mongoengine-odm.readthedocs.org/en/latest/apireference.html):

class mongoengine.queryset.QuerySet(document, collection)
Run Code Online (Sandbox Code Playgroud)

是" 从查询返回的一组结果.包装MongoDB游标,提供Document对象作为结果. "

当我type()在我的解释器中检查QuerySet对象时,它表示QuerySet对象是a <class 'mongoengine.queryset.QuerySet'>,与API指南一致.

我很困惑,但因为以实际访问个人Mongoengine Document在查询集实例对象,我必须使用索引的方法,如[0](对于第一Document物体)或[2](用于第三Document对象)参见本SO问题关于切片QuerySet.有趣的是,您还可以调用len()QuerySet实例.

即使QuerySet是一个类对象,为什么它看起来像一个列表对象?据我所知,它不会继承UserList,也没有data属性.任何帮助将不胜感激.

谢谢.

编辑:

谢谢你的建议@isbadawi.这很有帮助.QuerySet类对象确实包含__getitem__方法,正如您的链接所暗示的那样,该方法与索引"大致相同"(例如x.__getitem__(i),大致相当于x[i]).因此,如果QuerySet正在模拟列表类__getitem__,那么实际的Document对象存储在类中的哪个位置?在一个属性?这是dir(QuerySet)我的翻译中的输出:

> ['_QuerySet__already_indexed', '_QuerySet__dereference', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_as_pymongo', '_as_pymongo_coerce', '_build_index_spec', '_class_check', '_collection', '_collection_obj', '_cursor', '_cursor_args', …
Run Code Online (Sandbox Code Playgroud)

python class list mongodb mongoengine

8
推荐指数
1
解决办法
5199
查看次数

标签 统计

class ×1

list ×1

mongodb ×1

mongoengine ×1

python ×1