【问题标题】:Use javascript variable as a value of $regex in MongoDB query在 MongoDB 查询中使用 javascript 变量作为 $regex 的值
【发布时间】:2019-01-07 15:06:39
【问题描述】:

我正在尝试将参数传递给 mongo 查询 - 如果我输入文字,它可以正常工作,但是,当我尝试用变量(参数)替换文字时,它会失败

想象一个带有“事物”的数据集

{"thing": {"name":"book","label":"Bobs"}}
{"thing": {"name":"blanket","label":"Bobs"},
{"thing": {"name":"books","label":"Jills"},
{"thing": {"name":"blankets","label":"Jills"},

我有办法找到“书”“书”“书”“书”或“毯子”

如果我用文字“书”来做这件事——它会起作用

function( name, callback ) {
    Catalog
        .find({ 'thing.name': {"$regex": /Book/, "$options": "i" }})
        .exec(callback);
}

但是 - 我希望使用参数“名称”。

function( name, callback ) {
    Catalog
        .find({ 'thing.name': {"$regex": /name/, "$options": "i" } })
        .exec(callback);
}

但这不起作用,它似乎在寻找文字“名称”而不是传入的值。我该如何逃脱呢?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    可以这样做:-

    function( name, callback ) {
    
        Catalog
            .find({ "thing.name": { $regex: name, $options: "i" }})
            .exec(callback);
    }

    【讨论】:

      【解决方案2】:

      创建RegExp 类的实例。它还允许您从查询中删除 $options 属性,如下所示:

      function( name, callback ) {
      
          var regexName = new RegExp(name, "i");
          Catalog
              .find({ 'thing.name': { "$regex": regexName } })
              .exec(callback);
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-01
        • 2019-08-07
        • 2015-04-19
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        相关资源
        最近更新 更多