我有一个名为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})
})
在这里,我添加了两个替换语句,将+
替换为\\+
,将.
替换为\\.
但是,上面的代码不起作用。这给了我零结果。 如果我错了,请帮助我。
谢谢,
答案 0 :(得分:2)
let word = "c++";
Skill.find({ "name": RegExp("^" + word.replace(/\+/g,"\\+"),"i") })
或
Skill.find({ "name": { "$regex": "^" + word.replace(/\+/g,"\\+"), "$options": "i" } })
两者都没有问题地返回文档