2012-05-23 13 views
14

'DE DEVREYE ALINIR Burada bir sorunum var. Geleneksel bir ilişkisel db için LIKE gibi bir şey kullanarak benim Node JS dosyasında MongoDB sorgulamak istiyorum. Sorun şu ki LIKE yapmak istediğim şey bir değişmez değil ... bir değişken! Bunu henüz yapmak için iyi bir yol bulamadım. İşte ona götürdü "durrr ilk denemek" vuruldu:Node JS'de Regex ile Mongo Sorgusu VARIABLE

var result = postData.replace(/\+/g,' ').substring(5); 
db.testlogwiki.find({"line_text" : /result/ }; 
//predictably only matches to the literal "result" as opposed to my variable 

testlogwiki Mongo yapılır ... Ben Çalışıyorsa var ve bu kelimenin tam anlamıyla "line_text" içeren "Sonuç" Girişleri db mach yapar.

Bu çok basit bir soru gibi görünüyor ...

cevap

33

bu bir deneyin:

db.testlogwiki.find({"line_text" : new RegExp(result) }; 
+0

Sen bir azizsin. Eve geldiğimde bunu kabul edeceğim (kabul edemeyeceğim bir zamanım var). – PinkElephantsOnParade

+0

Şimdi üstesinden gelebilmeniz gerekir :) –

+2

Değişkeninizin içinde herhangi bir regex özel karakteri yok mu, yoksa bu başarısız olur! –

2

Ayrıca $ regex seçeneğini kullanabilirsiniz.

db.testlogwiki.find({ line_text: { $regex: result[, $options: 'i'] } }); 
4

İkisi değişkeni girdi bağlı olarak başarısız olabilir

db.testlogwiki.find({"line_text" : new RegExp(result, 'i') }; // to make this case insensitive 

veya

db.testlogwiki.find({ line_text: { $regex: result[, $options: 'i'] } }); 
0

diğer yanıtların hepsi çalışacak

diğerleri gibi sen Normİfd kullanabilirsiniz Belirtilen ama özel regex c kaçmalısınız haracters veya başka bir şey başarısız olabilir.

Lodash bunu yapmanın bir işlevi vardır

https://lodash.com/docs#escapeRegExp

db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') }; (sen muhtemelen olmalı onu kullanmıyorsanız, bu ES6 + spec bile değil şeker bir sürü ekler)