NodeJS Query with MongoDB - PullRequest
       6

NodeJS Query with MongoDB

0 голосов
/ 24 сентября 2018

Я хочу использовать add regex для моего запроса в 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 голосов
/ 24 сентября 2018

Редактировать: удалось узнать ответ.Пришлось использовать новый 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})            
    }) 
});  
0 голосов
/ 24 сентября 2018

Вы здесь так близко.Вместо того, чтобы пытаться передать строку в MongoDB find, как вы делали выше, просто введите регулярное выражение.

Таким образом, вы можете использовать строку шаблона или объединить строки (например, '/'+tf+'/i').

ОБНОВЛЕНИЕ Только что упомянутый метод не будет работать по всем причинам, которые я собираюсь объяснить в следующем параграфе относительно исходной проблемы.Это не создает фактическое регулярное выражение.

Ранее, когда вы передаете одну строку в функцию find, Mongo начинает искать ключ "str1" и проверяет, нашел ли он значениеэта строка, независимо от того, какое «ключевое слово»: {$ regex: / '+ tf +' / i} 'будет выглядеть как одна строка (обратите внимание на окружающие одинарные кавычки).Вы не можете вызвать анализ JSON для этой конкретной строки, потому что она не является допустимой строкой в ​​кодировке JSON.Ниже приведен пример, который должен работать лучше:

app.post('/form',function(req,res){
    var tf = req.body.termFound;
    // var reg =`/${tf}/i`; not an actual regex, still a string!!!
    var reg = new RegExp(tf, 'i') // as you have since discovered

    db.collection('a').find({"keyword": {$regex: reg }}).toArray(function (err,results){        
        if (err) return console.log(err)
        res.render('stest.ejs',{arr:results})    
    });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...