我在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)
似乎没有效果。我只是误解了此功能的作用。我还能如何加快查询速度?