PyMongo 查询函数具有多个参数并将结果传递给 Dash 应用程序

问题描述 投票:0回答:1

好吧,我有一个 MongoDB 数据库,使用 Python 模块执行 CRUD 功能,并将结果信息传递到 Dash 应用程序中。 这是相关的Python方法:

   def read(self, query):
        results = self.database.animals.find(query)
        
        return results

以及我需要帮助的回调函数:

@app.callback(Output('datatable-id','data'),
              [Input('rescue-dropdown', 'value')],
             prevent_initial_call=True)
def update_dashboard(value):   
    #start case
    df = pd.DataFrame.from_records(shelter.read({}))
    # filter interactive data table with MongoDB queries
    if (value == 'Water Rescue'):
        df = pd.DataFrame.from_records(shelter.read({'animal_type': 'Dog'}))
        
       
    df.drop(columns=['_id'],inplace=True)
    data=df.to_dict('records')
       
       
    return (data)

到目前为止,所有这些都按预期进行。当我尝试添加更多查询过滤器作为 housing.read() 中的参数时,问题就出现了。如何修改 Python 方法以接受多个参数或更改回调函数中的某些内容以允许它?

对于此下拉值(“水上救援”),查询过滤器为:

{'animal_type': 'Dog'}, {'breed': {'$in':['Labrador Retriever Mix', 'Chesapeake Bay Retriever', 'Newfoundland']}}, {'sex_upon_outcome': 'Intact Female'}, {'age_upon_outcome_in_weeks': {'$gte': '26'}}, {'age_upon_outcome_in_weeks': {'$lte': '156'}}

我尝试将Python方法中的查询参数更改为**kwargs或*args,但要么做得不正确,要么这不是答案。 如果需要,我可以包含更多代码,但由于在我尝试添加更多过滤器之前没有任何问题,我认为这就是问题发生的地方。

python callback mongodb-query pymongo plotly-dash
1个回答
0
投票

您需要将所有条件指定为单个参数,即。不要为每个条件使用一个字典,而是在同一字典中指定所有条件:

df = pd.DataFrame.from_records(shelter.read({
    'animal_type': 'Dog',
    'breed': {
        '$in': [
            'Labrador Retriever Mix', 
            'Chesapeake Bay Retriever', 
            'Newfoundland'
        ]
    },
    'sex_upon_outcome': 'Intact Female',
    'age_upon_outcome_in_weeks': {'$gte': '26'},
    'age_upon_outcome_in_weeks': {'$lte': '156'}
}))
© www.soinside.com 2019 - 2024. All rights reserved.