我有一个地方集合,我试图从中提取地名以向用户建议,但这需要花费很多时间,想知道是否有任何方法可以优化。我使用mongoengine ORM,数据库是mongodb。
查询:
results = Place.objects(name__istartswith=query).only('name')
查询在微秒内的时间非常短。
但现在我尝试从结果中访问名称
names = [result.name for result in results]
此行需要很长时间,从3-5秒不等,长度大约为2500。
我尝试使用scalar
,但现在当我在另一个列表上建立联合时,时间会增加。
是否有更好的方式来访问名单。
答案 0 :(得分:0)
查询集在迭代之前不会被操作,因此results = Place.objects(name=query).only('name')
返回尚未调用的查询集。当您迭代它时,将进行查询并通过网络发送数据。
通过pymongo运行时查询速度慢吗?由于你不需要它们,因为MongoEngine对象尝试使用as_pymongo - 它会返回原始词典。
其他提示是确保查询具有高效性 - 使用索引 - 请参阅profiler文档。