2014-11-02 9 views
5

Chciałbym utworzyć zapytanie MongoDB dla dokumentów na podstawie wyrażenia regularnego, które kontempluję. Dla np Mam skonstruował prosty regex następująco który jest kombinacją losowo litery i liczby losowej w NodejsJak używać zmiennej regex w zapytaniu do MongoDB

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 + '.*; 

Próbowałem różnych kombinacji dla zmiennej regex jak

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() 

Żadne o to nie działa. Jednak gdy piszę faktyczne wyrażenie regularne, otrzymuję rekordy np.

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

Każda pomoc zostanie doceniona.

Dzięki Ganesh

+0

Czarodziej, dzięki. Jednak nie wydawało się to działać .var stream = collection.find ({"FirstName": {$ regex: val}}). Stream(); stream.on ("dane", funkcja (element) results.push (element); –

+0

Wystąpił błąd lub po prostu nie można uzyskać oczekiwanego rezultatu? Przykład dokumentu przechowywanego w bazie danych może być pomocny – Wizard

Odpowiedz

0

Jeśli chcesz użyć zmiennej val jako parametr części kwerendy, można użyć $ regex, na przykład:

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

Nie może umieścić $ regex w $ w operatora zgodnie z instrukcją.

Jeśli chcesz umieścić regularny przedmiot ekspresji w dolarów operatora, trzeba użyć JavaScript regularny przedmiot ekspresji, na przykład:

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

Nawiasem mówiąc, val w /val/ jest stały ciąg , a nie zmienną zdefiniowaną powyżej.

+0

Witam -Dziękuję, ale to nie zadziałało - var val = randletter + randnum + '. *', Var stream = collection.find ({"FirstName": {$ regex: val}}). Stream(); Pozdrawiam Ganesh –

+0

@ TinniamV.Ganesh, Jaka jest wartość ** FirstName ** w bazie danych? A może po prostu żaden element nie spełnia Twoich potrzeb? – Wizard

+1

Wizard - Firstname to tylko ciąg liter i cyfr. pusty zestaw .Inna wersja var stream = collection.find ({"FirstName": new RegExp (val)}). stream(); pracował mimo to Pozdrawiam Ganesh –

14

Należy utworzyć obiekt wyrażeń regularnych z ciągu znaków, korzystając z konstruktora RegExp, ponieważ składnia /.../ jest używana tylko w przypadku literałów.

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

JohnnyHK - To zadziwiająco dobrze. Zmiany, które wprowadziłem, to var val = randletter + ". *" + Randnum + ". *"; var stream = collection.find ({"FirstName": new RegExp (val)}). stream(); Dzięki, Ganesh –

Powiązane problemy