Mongoose中的条件查询与查询中的整数

时间:2015-03-28 01:03:47

标签: javascript mongoose

我正在看这个问题How to build a conditional query in Mongoose?并尝试通过处理查询字符串中的整数来构建它。

我有以下代码。

    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正则表达式正在拾取以int开头的值,但这似乎按照我的预期执行(返回结果version = 2)。

如果我要重构我的代码如下,这部分工作。然而,这个解决方案并不是真正可维护的,因为我需要为每个潜在的参数添加一个条件,并且需要返回并修改为更多可用。

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

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

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

我可以在这里使用的解决方案允许我在请求中使用任何参数,如果它与我的patt正则表达式匹配,则视为整数吗?

以下是我的数据模型片段,一旦我能够正常工作,我打算添加更多numbersstrings

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

    mongoose.model('Model', ModelSchema);

1 个答案:

答案 0 :(得分:1)

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

很高兴有效。谢谢!