2012-06-17 11 views
11

Estoy usando el controlador mongodb de JavaScript de nodejs. Quiero hacer esta consulta en mi función de JavaScript:MongoDB Búsqueda de expresiones regulares: comienza con el uso del controlador de JavaScript y NodeJS

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

El cliente mongo recupera 8 documentos que coinciden con este criterio. Sin embargo, mi código JavaScript no busca ningún 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); 
       }); 
      } 
     }); 
    }; 

También probé

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

Por cierto, me parece coincidencia exacta funciona bien, pero eso no es lo que quiero.

es decir.

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

Respuesta

28

Casi lo tienes. Siempre terminas con una expresión regular dentro de una cadena y buscando la cadena '/^94404/' encontrando algo a menos que tengas algunos códigos postales que parecen extraños.

La manera más fácil de construir un objeto de expresión regular de una cadena en JavaScript es utilizar new RegExp(...):

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

A continuación, se puede:

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

Ese tipo de cosas trabaja en la consola MongoDB y Cosas similares funcionan en la interfaz de Ruby, por lo que también debería funcionar en la interfaz de JavaScript.

9

$options => i para la búsqueda que ignore

de inicio con string

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

final con string

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

Contiene string

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

¿No Contiene string

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

Mantener esto como señal, y una referencia para cualquier otra alteración que pueda necesitar. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Cuestiones relacionadas