Поиск регулярного выражения MongoDB - начинается с использования драйвера javascript и NodeJS
Я использую драйвер JavaScript mongodb от nodejs. Я хочу сделать этот запрос в моей функции JavaScript:
db.mycollection.find({Zip:/^94404/});
Клиент mongo извлекает 8 документов, которые соответствуют этим критериям. Однако мой код JavaScript не извлекает никаких документов.
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);
});
}
});
};
Я также пробовал
<pre>
var qs = {Zip: '/^'+zipCode+'/'};
</pre>
Btw, я считаю, что точное соответствие работает нормально, но это не то, что я хочу.
т.
<pre>
var q = {'Zip' :zipCode};
</pre>
Ответы
Ответ 1
У тебя это почти есть. Вы продолжаете заканчивать регулярным выражением внутри строки и ищете строку '/^94404/'
, чтобы найти что-либо, если у вас нет странных выглядящих почтовых индексов.
Самый простой способ создать объект регулярного выражения из строки в JavaScript - это использовать new RegExp(...)
:
var query = { Zip: new RegExp('^' + zipCode) };
Затем вы можете:
collection.find(query).toArray(...)
Подобные вещи работают в оболочке MongoDB, и подобные вещи работают в интерфейсе Ruby, поэтому он должен работать и в интерфейсе JavaScript.
Ответ 2
$options => i
для нечувствительного к регистру поиска
Начните с string
db.collection.find({zip:{'$regex' : '^string', '$options' : 'i'}})
Конец с string
db.collection.find({zip:{'$regex' : 'string$', '$options' : 'i'}})
Содержит string
db.collection.find({zip:{'$regex' : 'string', '$options' : 'i'}})
Не содержит string
db.collection.find({zip:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
Храните это как закладку и ссылку на любые другие изменения, которые могут вам понадобиться.
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/