2012-06-17 10 views
11

Sto utilizzando il driver mongodb JavaScript da nodejs. Voglio fare questa query nella mia funzione JavaScript:Ricerca di espressioni regolari MongoDB - Inizia con l'utilizzo di driver javascript e NodeJS

db.mycollection.find({Zip:/^94404/}); 

Il client mongo recupera 8 documenti che corrispondono a questi criteri. Tuttavia il mio codice JavaScript non preleva alcun documento.

 

    DataProvider.prototype.findByZipcode = function(zipCode, callback) { 
     this.getCollection(function(error, collection) { 
      if (error) 
       callback(error); 
      else { 
       var qs = '{Zip:/^'+zipCode+'/}'; 
       collection.find(qs).toArray(function(error, results) { 
        if (error) 
         callback(error); 
        else 
         callback(null, results); 
       }); 
      } 
     }); 
    }; 

Ho anche provato

<pre> 
var qs = {Zip: '/^'+zipCode+'/'}; 
</pre> 

Btw, trovo corrispondenza esatta funziona bene, ma non è quello che voglio.

ie.

<pre> 
var q = {'Zip' :zipCode}; 
</pre> 

risposta

28

Quasi ce l'hai. Continui a finire con un'espressione regolare all'interno di una stringa e cerchi la stringa '/^94404/' andando a trovare qualsiasi cosa, a meno che tu non abbia alcuni codici postali dall'aspetto strano.

Il modo più semplice per costruire un oggetto regex da una stringa in JavaScript è quello di utilizzare new RegExp(...):

var query = { Zip: new RegExp('^' + zipCode) }; 

Quindi è possibile:

collection.find(query).toArray(...) 

Questo genere di cose funziona nel guscio MongoDB e cose simili funzionano nell'interfaccia di Ruby quindi dovrebbe funzionare anche nell'interfaccia JavaScript.

9

$options => i per caso ricerca maiuscole

Inizia con string

db.collection.find({zip:{'$regex' : '^string', '$options' : 'i'}}) 

End con string

db.collection.find({zip:{'$regex' : 'string$', '$options' : 'i'}}) 

Contiene string

db.collection.find({zip:{'$regex' : 'string', '$options' : 'i'}}) 

Non contiene string

db.collection.find({zip:{'$regex' : '^((?!string).)*$', '$options' : 'i'}}) 

Tenere questo come un segnalibro, e un punto di riferimento per tutte le altre modifiche potrebbe essere necessario. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Problemi correlati