我使用mongoengine作为Object-Document映射器。以下是导致问题的集合的简要说明。集合A中的每个文档都可以包含对集合B中文档的引用列表。
class A(Document):
list_b = ListField(EmbeddedDocumentField(EB))
#other fields are not mentioned.
class EB(EmbeddedDocument):
b_reference = ReferenceField('B')
loc = GeoPointField()
class B(Document):
name = StringField()
#other fields are not mentioned.
当我尝试使用
访问特定文档的列表对象时 document_of_A.list_b
上述行的执行时间取决于列表中存在的参考号。例如。列表中的100个引用需要100毫秒。
是否有更好的方法来获取引用?,以便减少上述行的执行时间。
答案 0 :(得分:2)
在查询时是否要快速获取所有引用时,应使用select_related
标志。请注意,参考查询将需要额外的查询,而select_related()
旨在减少到mongodb的往返次数。
# Single document lookup
document_of_A.select_related(2)
# Queryset
A.objects.select_related(2)
为什么2为select_related查找?那么递归深度是: