mongoDB引用获取需要时间

mongoDB引用获取需要时间,mongodb,optimization,pymongo,mongoengine,Mongodb,Optimization,Pymongo,Mongoengine,我使用mongoengine作为对象文档映射器。以下是导致问题的集合的简要说明。集合A中的每个文档都可以有对集合B中文档的引用列表 class A(Document): list_b = ListField(EmbeddedDocumentField(EB)) #other fields are not mentioned. class EB(EmbeddedDocument): b_reference = ReferenceField('B') loc =

我使用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.
当我尝试使用访问特定文档的列表对象时

A.列表b的文档

上述行的执行时间取决于列表中存在的引用数。例如,列表中的100个引用需要100毫秒


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

如果要快速获取所有引用,在查询时应使用
选择相关的
标志。请注意,参考查询将需要额外的查询,
select_related()
旨在减少到mongodb的往返次数

# Single document lookup
document_of_A.select_related(2)

# Queryset
A.objects.select_related(2)
为什么选择2进行与select_相关的查找?递归深度是:

  • 在列表中查找任何引用
  • 在单个嵌入文档中查找引用

  • 欢迎来到MongoDb文档组织的挑战:)您是否需要所有引用的文档?是否对文档
    B
    的引用进行了索引,以便可以一次返回与
    a
    相关的文档请求?否,“列表”字段中没有索引。如果没有索引,MongoDB可能需要搜索每个文档以查找匹配项。即使在我创建索引后也没有任何更改。当我使用select_related(2)作为查询的一部分时,查询时间是相同的,但在尝试获取引用时没有实现优化。其中,当我将select_related(2)用作单个文档的一部分时,引用时间节省了,但现在select_related(2)部分需要时间。啊,对于查询,可能应该是select_related(3)对不起。数字是它应该下降的深度。我的错,我之前做的测试是错误的。select_related(2)现在工作。@Ross如何将select_related()结果转换为_json()?