为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 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 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信