Python mongoengine select_related(n)没有达到我的预期

时间:2018-07-23 13:50:51

标签: python mongodb mongoengine

我在mongo中存储了一个对象,该对象具有参考字段列表。在restplus应用程序中,我需要解析此对象列表并将其映射到JSON文档中以返回给客户端。

# Classes I have saved in Mongo
class ThingWithList(Document):
    list_of_objects = ListField(ReferenceField(InfoHolder))

class InfoHolder(Document):
    thing_id = StringField()
    thing_i_care_about = ReferenceField(Info)

class Info(Document):
    name = StringField()
    foo = StringField()
    bar = StringField()

我发现遍历列表非常慢。我猜是因为每次取消引用列表中的子对象时,都必须执行另一个数据库查询。

简单(但垃圾)的方法:

info_to_return = []    
thing = ThingWithList.get_from_id('thingsId')
for o in list_of_objects:
    info = {
        'id': o.id,
        'name': o.thing_i_care_about.name,
        'foo': o.thing_i_care_about.foo,
        'bar': o.thing_i_care_about.bar
    }
    info_to_return.append(info)
return(info_to_return)

我认为我可以通过使用select_related来解决此问题,这听起来像它应该对我进行N个级别的深度取消引用,以便我仅进行一次大型mongo调用,而不是每次迭代进行多次。当我添加

thing.select_related(3)

似乎没有效果。我只是误解了此功能的作用。我还能如何加快查询速度?

0 个答案:

没有答案