mongoDB引用获取需要时间
我使用mongoengine作为对象文档映射器。以下是导致问题的集合的简要说明。集合A中的每个文档都可以有对集合B中文档的引用列表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 =
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()?