繁体   English   中英

Mongoose中的条件查询,查询中带有整数

[英]Conditional query in Mongoose with integers in query

我在看这个问题如何在猫鼬中建立条件查询? 并尝试通过处理查询字符串中的整数来构建它。

我有下面的代码。

    var conditions = {};
    var patt = new RegExp('^[0-9]');

    for (var key in req.query) {
      if (req.query.hasOwnProperty(key)) {
        if(patt.test(req.query[key])) {
            conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i');
        }
        else {
            conditions[key] = new RegExp('^' + req.query[key] + '$', 'i');
        }
      }
    }

当我执行&color=red这将返回等于红色的颜色。

但是当我做&version=2等时,我什么也没得到。

我在if语句中放入了一个控制台日志,以确认patt regex正在获取一个以int开头的值,但这似乎确实按照我的期望执行(返回版本= 2的结果)。

如果我要按以下方式重组我的代码,那么这确实可以完成部分工作。 但是,该解决方案并不是真正可维护的,因为我需要为每个潜在的参数添加一个条件,并且需要返回并在有更多可用参数时进行修改。

var version = parseInt(req.query.version);
var query = Model.find();
if (version) {
    query = query.where('version').equals(version);
}

上面代码段的另一个问题是,如果我正在寻找一个字符串,例如title,并且title以一个数字开头,例如7up,那么这也不返回任何结果。

var title= req.query.title;
var query = Model.find();
if (version) {
    query = query.where('title').equals(title);
}

我在这里可以使用一种解决方案,使我可以在请求中使用任何参数,如果与我的patt regex匹配,则将其视为整数?

下面是我的数据模型的一个片段,一旦可以使用,我打算添加更多numbersstrings

    var ModelSchema = new Schema({
        version: {
            type: Number,
            trim: true
        },
        color: {
            type: String,
            trim: true
        },
        title: {
            type: String,
            trim: true
        },    
    });

    mongoose.model('Model', ModelSchema);

如果我遵循您的代码,则您似乎在尝试使用正则表达式搜索查询中的整数,这对我来说没有意义。 conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i'); 但您应该只需要具备conditions[key] = parseInt(req.query[key]);

很高兴。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM