0

我使用 mongoengine 作为对象文档映射器。以下是导致问题的集合的简要说明。集合 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 毫秒。

有没有更好的方法来获取引用?这样可以减少上述行的执行时间。

4

1 回答 1

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. 在单个嵌入文档中查找参考
于 2013-04-23T10:25:46.760 回答