我想在mongodb中的查询中使用添加正则表达式。
server.js
app.post('/form',function(req,res){
var tf = req.body.termFound;
var str1 ='"keyword":{$regex:/'+tf+'/i}';
db.collection('a').find({str1}).toArray(function (err,results){
if (err) return console.log(err)
res.render('stest.ejs',{arr:results})
});
例如,如果termFound为LOOPS。 我希望添加正则表达式,以使其不区分大小写,从而允许我使用(loops)或(loops,java)查找字段值
"keyword":{$regex:/LOOPS/i}
这是从上面的第3行代码完成的。 但是,当我尝试将其发送到mongoDB进行连接时。我怀疑它给出了不同的价值。我尝试过
var str1 ='"keyword":{$regex:/'+tf+'/i}';
var str3 ={str1};
res.send(str3);
我是
返回{"str1":"\"keyword\":{$regex:/LOOPS/i}"}
我的最终查询应该是
db.collection('a').find({"keyword":$regex:/LOOPS/i}).toArray(function (err,results)
我已经尝试过JSON.parse(str1)
var str1 ='"keyword":{$regex:/'+tf+'/i}';
var filters = JSON.parse(str1);
db.collection('a').find(filters).toArray(function (err,results){
但是被给予了
SyntaxError:意外令牌:JSON中的位置9
在JSON.parse()
我花了几天的时间来解决这个问题。.我的问题是我该如何用正则表达式查询它,以使搜索不区分大小写?
答案 0 :(得分:1)
编辑:设法找出答案。必须使用新的RegExp()创建reg exp对象!
app.post('/form',function(req,res){
var tf=req.body.toFind;
db.collection('a').find({"keyword":new RegExp(tf,'i')}).toArray(function (err,results){
if (err) return console.log(err)
res.render('stest.ejs',{question:results})
})
});
答案 1 :(得分:0)
您在这里很近。不必像上面那样尝试将字符串传递给您的MongoDB #include <stdio.h>
#include <wait.h>
#include <string.h>
void print_child_status (int status) {
if (WIFEXITED (status)) {
fprintf (stdout, "Child exited with status %d\n", WEXITSTATUS (status));
} else if (WIFSTOPPED (status)) {
fprintf (stdout, "Child stopped by signal %d (%s)\n", WSTOPSIG (status), strsignal (WSTOPSIG (status)));
} else if (WIFSIGNALED (status)) {
fprintf (stdout, "Child killed by signal %d (%s)\n", WTERMSIG (status), strsignal (WTERMSIG (status)));
} else {
fprintf (stdout, "Unknown child status\n");
}
}
,只需传递正则表达式即可。
这样,您可以使用模板字符串或串联字符串(例如find
)。
更新 由于我准备在以下段落中解释原始问题的所有原因,上述方法无法使用。这不会创建实际的正则表达式。
以前,当您将单个字符串传递给find函数时,Mongo开始寻找键“ str1”,并查看它是否找到了该字符串的值,无论是否使用“关键字”:{$ regex:/'+ tf +'/ i}'的结果为单个字符串(请注意周围的单引号)。您不能对此特定字符串调用JSON解析,因为它不是有效的JSON编码字符串。请参见下面的示例,该示例应该更好地工作:
'/'+tf+'/i'