从从查询字符串检索的查询对象中在Mongoose中查找

时间:2018-12-11 06:00:57

标签: javascript express mongoose server-side

我从URL中获取一个查询字符串并进行解析,然后将其映射,这样我就得到了这样的对象:

{ '$and': [ { length: { '$gt': '2' } }, { length: { '$lt': '55555' } } ] }

哪个是名为q的常量。

那么猫鼬的查找查询将如何?我尝试过:

  Schema.find(q, function (err, results) {
    if (err) {
      console.log(err);
    }
    else {
      console.log(results);
    }
  });

但是它会返回空列表([])。控制台登录q后,将打印到控制台:

{ '$and': [ { length: [Object] }, { length: [Object] } ] }

2 个答案:

答案 0 :(得分:0)

  

-fix-将值用作数字,因为在您的数据库中长度被强制转换为数字

db.collection.find({
  "$and": [
    {
      length: {
        "$gt": 2 // not '2'
      }
    },
    {
      length: {
        "$lt": 55555 // not '55555'
      }
    }
  ]
})

https://mongoplayground.net/p/aJVF9QfDeKy

答案 1 :(得分:0)

 const q= { '$and': [ { length: { '$gt': '2' } }, { length: { '$lt': '55555' } } ] }

// converting string key to integer

q['$and'].map(function(obj) {

    for(var prop in obj.length){
        if(obj.length.hasOwnProperty(prop) && obj.length[prop] !== null && !isNaN(obj.length[prop])){
            obj.length[prop] = +obj.length[prop];   
        }
    }
});

console.log(q)

Schema.find(q, function (err, results) {
    if (err) {
      console.log(err);
    }
    else {
      console.log(results);
    }
  });