正则表达式使用mongodb命令行但不使用mongoose

时间:2018-05-25 08:13:13

标签: node.js regex mongodb mongoose

我有一个名为Skills的模式,它有一个名为name的字符串字段。我想基于给定的字符串在字段上执行搜索。 对于像java这样的普通字符串,它的工作正常。但是,对于C++,它将++部分省略为+是正则表达式中的一个特殊字符。所以我将+替换为\\+,这在mongodb中工作正常。 为此,以下是我在mongodb命令行中的查询,它给出了我所需的结果:

db.skills.find({"name": {'$regex': '^c\\+\\+', '$options': 'i'}})

以下是我的mongoose代码:

    word = '^' + req.query.word;
    word = word.replace(/\+/g, '\\+')
    word = word.replace(/\./g, '\\+')
    Skill.find({"name": {'$regex': word, '$options': 'i'}}).limit(10).exec(function (err, results) {
        res.json({'results': results})
    })

在这里,我添加了两个替换语句,将+替换为\\+,将.替换为\\.

但是,上面的代码不起作用。这给了我零结果。 如果我错了,请帮助我。

谢谢,

1 个答案:

答案 0 :(得分:2)

let word = "c++";

Skill.find({ "name": RegExp("^" + word.replace(/\+/g,"\\+"),"i") })

Skill.find({ "name": { "$regex": "^" + word.replace(/\+/g,"\\+"), "$options": "i" } })

两者都没有问题地返回文档