2014-11-02 29 views
5

için bir sorguda bir normal ifade değişkenini nasıl kullanabilirim? Düzenlemeye çalıştığım bir normal ifadeye dayalı belgeler için MongoDB sorgusu yapmak istiyorum. benMongoDB

var stream = collection.find({"FirstName": /val/).stream(); 
&& 
var stream = collection.find({"FirstName": /$val/).stream(); 
&& 
var stream = collection.find({"FirstName": {$in : [{$regex:val}]}}).stream() 
&& 
var stream = collection.find({"FirstName": {$in : [{$regex:$val}]}}).stream() 

gibi regex değişken için çeşitli kombinasyonları denedi

var randnum = Math.floor((Math.random() * 10) + 1); 
var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z']; 
var randletter = alpha[Math.floor(Math.random() * alpha.length)]; 
var val = randletter + randnum + '.*; 

Nodejs

yılında için rasgele harfi ve rastgele bir sayı bir kombinasyonudur şöyle ör için basit bir regex inşa ettiler Hiçbiri işe yaramıyor gibi görünüyor. Ancak asıl ifadeyi yazdığımda, ör.

var stream = collection.find({"FirstName": /J.*/).stream(); 

Herhangi bir yardım için teşekkür ederiz. Sorgu kısmının bir parametre olarak değişken val kullanmak istiyorsanız

Teşekkür Ganesh

+0

Sihirbaz, Teşekkürler. Ancak, bu işe yaramadı. Var stream = collection.find ({"FirstName": {$ regex: val}}). stream.on ("data", işlev (öğe) results.push (madde); –

+0

Herhangi bir hata oluşur veya beklenen sonucu almıyor musunuz? Veritabanında saklanan bir belgenin örneği yardımcı olabilir. – Wizard

cevap

0

, örneğin, $ regex kullanabilirsiniz:

collection.find({"FirstName": {$regex:val}}) 

düşmez kullanım kılavuzuna göre $ regex ürününü $ operatörüne koyma izni verilmiştir. Eğer operatörü Doları cinsinden düzenli ifade nesnesi koymak istiyorsanız

, örneğin, JavaScript düzenli ifade nesnesi kullanmak zorunda: /val/ yılında val arada

collection.find({"FirstName": {$in: [/abc/, /123/]}}) 

, sabit dizedir Yukarıda tanımladığınız değişkeni değil.

+0

Merhaba -Teşekkürler ama işe yaramadı - var val = randletter + randnum + '. *'; Var stream = collection.find ({"FirstName": {$ regex: val}}) akış(); Saygılar Ganesh –

+0

@ TinniamV.Ganesh, veritabanında ** FirstName ** değeri nedir? Veya belki sadece hiçbir ürün sorgu ihtiyaçlarını tatmin edebilir? – Wizard

+1

Sihirbazı - Ad sadece harf ve rakamların bir dizedir.Bir kez birkaç kez denedim boş set.Diğer versiyon var stream = collection.find ({"FirstName": yeni RegExp (val)}). stream(); çalıştı her neyse. Saygılar Ganesh –

14

/.../ sözdizimi yalnızca hazır bilgi ile kullanmak için RegExp yapıcısını kullanarak diziden düzenli bir ifade nesnesi oluşturmanız gerekir.

var stream = collection.find({"FirstName": new RegExp(val)}).stream(); 
+0

JohnnyHK - Bu çok iyi çalıştı. Yaptığım değişiklikler var val = randletter + ". *" + Randnum + ". *"; var stream = collection.find ({"FirstName": yeni RegExp (val)}). stream(); Teşekkürler Ganesh –