亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Flask 和 PyMongo 創建合適的過濾器?

如何使用 Flask 和 PyMongo 創建合適的過濾器?

瀟瀟雨雨 2022-06-07 18:45:57
    我在這里的第一篇文章:)我在我的網站上使用 Flask 和 PyMongo,我希望用戶能夠過濾數據庫結果。開始簡單:基本過濾器將根據價格參數返回結果。如果價格為無,那么我想返回所有結果。來自 MongoDB 文檔:$or 運算符對包含兩個或多個表達式的數組執行邏輯 OR 運算,并選擇滿足至少一個表達式的文檔   price = request.args.get('price')   if price:       price = int(price)   posts = db.collection.find({ '$or' : [                                {'price' : {'$lt' : price }},                                {'price' : {'$ne' : None }}                                ]                              })我的想法是,如果價格不是整數(無),$or 運算符將不滿足第一個表達式并移至第二個表達式,返回所有不等于無的值。但是,這并沒有真正起作用,當參數未通過或錯誤時,我想不出任何其他方式來顯示“所有”結果。還有一些更廣泛的問題 - 如果我想要多個過濾器怎么辦?我是否應該使用 $and 運算符為數據庫創建一個大查詢并操作變量值以獲得所需的結果?或者,還有更好的方法?我唯一想到的是每個過濾器的路線,但這聽起來不像是可行的。歡迎任何建議!謝謝!
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

編輯:


對于多個過濾器:


filter = {}

if price is not None: filter['price'] = {'$lt' : price }

if quantity is not None: filter['quantity'] = {'$lt' : quantity }

if volume is not None: filter['volume'] = {'$lt' : volume }


posts = db.testcollection.find(filter)

原件:


試試這個,以免自己在布爾邏輯世界中有點發瘋:


if price is None:

    filter = {}

else:

    filter = {'price' : {'$lt' : price }}


posts = db.collection.find(filter)


查看完整回答
反對 回復 2022-06-07
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

如果你想從前端傳遞一個數組(使用查詢參數),你可以使用 mongodb 的 $in 參數: URL 參數在數組中作為 JSON 對象發送:


/read?job_type%5B%5D=Full%20Time&job_type%5B%5D=Part%20Time&country%5B%5D=Germany&country%5B%5D=China


@app.route("/read", methods=['GET', 'POST'])

def read():

    job_type = request.args.getlist('job_type[]')

    country = request.args.getlist('country[]')

    filter = {}

    if len(job_type) > 0: filter['job_type'] = {'$in': job_type}

    if len(country) > 0:  filter['country'] = {'$in': country}

    jobs = db_operations.find(filter)


查看完整回答
反對 回復 2022-06-07
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號