【问题标题】:Conditional query in Mongoose with integers in queryMongoose 中的条件查询,查询中包含整数
【发布时间】:2015-03-28 01:03:46
【问题描述】:

我正在查看这个问题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 开头的值,但这似乎确实按我的预期执行(返回版本 = 2 的结果) .

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

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

上述 sn-p 的另一个问题是,如果我正在寻找一个字符串,例如标题,而标题以数字开头,例如 7up,那么这也不会返回任何结果。

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

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

下面是我的数据模型的一个 sn-p,一旦我能得到这个工作,我打算添加更多项目,numbersstrings

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

    mongoose.model('Model', ModelSchema);

【问题讨论】:

  • 能否请您展示一下您的猫鼬模型。
  • @NarendraSoni 我已经更新了这个问题,你的问题让我在最后做了一些测试,如果字符串以 int 开头,例如 7up,我也发现了另一个问题。你有什么想法吗?
  • 如果我遵循您的代码,您似乎正在尝试使用正则表达式来搜索查询中的整数,这对我来说没有意义。你有conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i');,但你应该可以简单地拥有conditions[key] = parseInt(req.query[key]);
  • @BrianShamblen 你应该把它放在一个答案中,这样我就可以接受它,因为它似乎有效,谢谢,如果你对是否可以处理以开头的字符串有任何想法,我也会感兴趣一个数字?
  • 如果您将正则表达式更改为 '^[0-9]$',它应该只匹配包含数字的字符串。

标签: javascript mongoose


【解决方案1】:

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

很高兴这有效。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2020-05-09
    • 2021-09-03
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多