Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MongoEngine查询优化_Python_Mongoengine - Fatal编程技术网

Python MongoEngine查询优化

Python MongoEngine查询优化,python,mongoengine,Python,Mongoengine,我有两个集合ScenarioDrivers和ModelDrivers,它们之间有一对多的关系 class ScenarioDrivers(Document): meta = { 'collection': 'ScenarioDrivers' } ScenarioId = ReferenceField('ModelScenarios') DriverId = ReferenceField('ModelDrivers') DriverCalib

我有两个集合
ScenarioDrivers
ModelDrivers
,它们之间有一对多的关系

class ScenarioDrivers(Document):
    meta = {
        'collection': 'ScenarioDrivers'
    }
    ScenarioId = ReferenceField('ModelScenarios')
    DriverId = ReferenceField('ModelDrivers')
    DriverCalibrationMethod = StringField()
    SegmentName = StringField()
    DriverValue = ListField()
    CalibrationStatus = StringField()
    AdjustedValues = ListField(default=[])
    CreateDate = DateTimeField(default=ObjectId().generation_time)
    LastUpdateDate = DateTimeField(default=datetime.utcnow())

class ModelDrivers(Document):
    meta = {
        'collection': 'ModelDrivers'
    }
    PortfolioModelId = ReferenceField('PortfolioModels')
    DriverName = StringField()
    CreateDate = DateTimeField(default=ObjectId().generation_time)
    LastUpdateDate = DateTimeField(default=datetime.utcnow())
    FieldFormat = StringField()
    DriverData = ListField()
我的问题是这样的

class GetCalibratedDrivers(Resource):
    def get(self, scenario_id):
        scenario_drivers_list = []

        scenario_drivers = ScenarioDrivers.objects(ScenarioId=scenario_id).exclude('ScenarioId').select_related(1)
        for scenario_driver in scenario_drivers:
            scenario_driver_dict = {
                'id': str(scenario_driver.id),
                'DriverId': str(scenario_driver.DriverId.id),
                'SegmentName': scenario_driver.SegmentName,
                'CalibrationMethod': scenario_driver.DriverCalibrationMethod,
                'CalibratedValues': exchange(scenario_driver.DriverValue),
                'AdjustedValues': scenario_driver.AdjustedValues,
                'LastUpdateDate': formatted_date(scenario_driver.LastUpdateDate),
                'FieldFormat': scenario_driver.DriverId.FieldFormat
            }
            scenario_drivers_list.append(scenario_driver_dict)

        return {
            'DriverCalibrations': scenario_drivers_list
        }
查询匹配
1140
记录,然后我构建了一个字典并将其列为一个列表


但此API调用只需
1140
条记录就可以处理
30s
。我在哪里失踪?请帮忙。我使用的是Pymongo和MongoEngine的最新版本

我认为问题不在于你的查询,而在于你循环了1140条记录。我看不到引用对象的任何使用,因此您应该考虑删除<代码>选择相关(1)< /代码>。一旦您这样做了,如果您想将引用对象ID转换为字符串,您可以使用
as_pymongo()
,默认情况下它会为您这样做。最后,如果您必须读取某些特定格式的数据,如
格式化的\u日期
交换
,最好将其保存为文档的一部分。i、 e.使用
LastUpdateDate
保存
FormattedLastUpdateDate
。在MongoDB中,保存文档时必须考虑特定于读取的逻辑。

ScenarioDrivers.ScenarioID
字段上是否有索引?我还没有定义任何索引。