在MongoDB查询中使用javascript变量作为$ regex的值

时间:2018-03-14 05:33:29

标签: javascript node.js mongodb mongoose

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

想象一下带有"事物"

的数据集
{"thing": {"name":"book","label":"Bobs"}}
{"thing": {"name":"blanket","label":"Bobs"},
{"thing": {"name":"books","label":"Jills"},
{"thing": {"name":"blankets","label":"Jills"},

我有一种方法可以找到" Book" "书" "图书" "书籍"或者"毯子"

如果我使用字面意图' Book' - 它的工作原理

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

但是 - 我想要这个论点' name'使用。

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

但这不起作用,它似乎在寻找字面上的名字'不是传入的价值。怎么逃避这个?

2 个答案:

答案 0 :(得分:1)

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

function( name, callback ) {

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

}

答案 1 :(得分:1)

可以这样做: -



function( name, callback ) {

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