【问题标题】:Mysteriously Invalid Mongoose Query神秘无效的猫鼬查询
【发布时间】:2018-08-01 22:14:10
【问题描述】:

我遇到了 MEPN 应用程序中的一个顽固错误。

这个伪代码应该从用户表单中提交的选项中组装一个 Mongoose 查询,然后使用该查询搜索一个集合。

var query = [];
query.push("{name:"+req.body.name+"}");
query.push("{status:{$in:["+req.body.statusarray+"]}}");
query.push("{range:{$gte:"+req.body.min+",$lte:"+req.body.max+"}}");

Collection.find(query, function(error, cursor){
  if(error) console.log("ERROR: "+error);
  else //do something
})

而是打印ERROR: ObjectParameterError: Parameter "filter" to find() must be an object, got {name: 'foobar'},{status : {$in : ['1','2','3']}},{range: {$gte:'0',$lte:'100'}}

使用Collection.find(JSON.parse(query), ...)} 代替会导致SyntaxError: Unexpected token n in JSON at position 1

然后,如果我在将查询传递给 JSON.parse() 之前将查询放在 {} 括号中,它会打印 Unexpected token { in JSON at position 1

我构建此查询的方式有问题吗?

【问题讨论】:

    标签: javascript node.js mongoose mongodb-query javascript-objects


    【解决方案1】:

    Collection.find() 想要一个对象,但您传递给它的是一个字符串数组,这就是您收到该错误的原因。

    您可以通过多种方式创建一个对象,但最简单的方法是只创建一个对象字面量:

    var query = {
        name: req.body.name,
        status: {$in:req.body.statusarray},
        range: {$gte: req.body.min, $lte:req.body.max }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 2020-06-02
      • 2012-02-03
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2018-02-05
      相关资源
      最近更新 更多