mongoDB引用提取需要时间

时间:2013-04-20 10:43:57

标签: mongodb optimization pymongo mongoengine

我使用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毫秒。

是否有更好的方法来获取引用?,以便减少上述行的执行时间。

1 个答案:

答案 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查找?那么递归深度是:

  1. 查找列表中的任何引用
  2. 查找单个嵌入文档中的引用