如何将复杂的字符串传递给pymongo以通过python查询?

时间:2019-06-12 15:44:04

标签: python-3.x mongodb pymongo

我需要过滤Web服务器请求并为pymongo设置查询,它并不简单,因为我需要多个字段具有“和”或“或”功能。

我过滤了get请求,获取了参数,构建了要传递给db..find的字符串。但这会引发错误。我已经确定了错误,因为我正在形成一个像这样的字符串以传递给函数,现在是它的字符串,而不是实际上是字典,它引发了错误。正确的做法是什么?

实际上,我必须得到类似的信息:{$ and:[{Title:{“ $ regex”:“ Hong Kong”}}},{Url:{“ $ regex”:“ hong”}}}}} { '_id':0,'Body':0}

我要发送的get请求是:http://127.0.0.1:5000/getRequest?Title=“香港抗议”&Url =“ hong”现在,下面的内容给出了所需的确切字符串,但是由于它不应该是字符串,因此会引发错误。请帮忙。

@app.route('/getRequest', methods=['GET'])
def request():
    global connection
    args = request.args
    if len(args) > 1:
        search_str = ""
        for key, val in args.items():
            search_str += '{'+key+':{"$regex":'+str(val)+'}},'
        search_str = search_str[:-1]
        display_dict={'id':0, 'Body':0}
        final_search_str = "{$and:["+search_str+"]},{'_id':0, 'Body':0}"
    #return(final_search_str)
    # query_str = request.args.get('query_string')
    db = connection['test']
    collection = db['collect1']

    output = []
    for s in collection.find(final_search_str):
            output.append({'Title' : s['Title'], 'Url' : s['Url']})

应该决定应将其传递给函数。通过pymongo进行这种复杂查询的更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用re和bson.regex.Regex模块执行此操作。
http://api.mongodb.com/python/current/api/bson/regex.html

function checkAuthenticated(req, res, next) {
  if(!req.header('authorization')) {
    return res.status(401).send({message: 'Unauthorized request.  Missing authentication header'});
  }

  let token = req.header('authorization').split(' ')[1];

  let payload = jwt.decode(token, '123');

  if(!payload) {
    return res.status(401).send({message: 'Unauthorized request.  Authetication header invalid'});
  }

  req.user = payload;

  next();
}

router.route('/:user_id')
  .get((req, res) => {
    User.findById(req.params.user_id, (err, user) => {
      if (err) {
        res.send(err);
      } else {
        res.json(user);
      }
    });
  })