使用MongoDB的NodeJS查询

时间:2018-09-23 22:54:55

标签: node.js mongodb express

我想在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()

我花了几天的时间来解决这个问题。.我的问题是我该如何用正则表达式查询它,以使搜索不区分大小写?

2 个答案:

答案 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'