好吧,我有一个 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,但要么做得不正确,要么这不是答案。 如果需要,我可以包含更多代码,但由于在我尝试添加更多过滤器之前没有任何问题,我认为这就是问题发生的地方。
您需要将所有条件指定为单个参数,即。不要为每个条件使用一个字典,而是在同一字典中指定所有条件:
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'}
}))