Query mongoose не возвращает результатов с $ regex - PullRequest
0 голосов
/ 06 ноября 2018

Попытка построить запрос mongoose с регулярным выражением, но по какой-то причине он всегда возвращает ноль результатов.

У меня есть модель с именем Place со значением wind_direction. wind_direction - это строка, которая выглядит примерно так:

place.wind_direction = "SW, WSW, W, WNW, NW, NE, ENE, E";

Я получаю значения через форму, в данном случае «W, WNW, NW» и пытаюсь построить регулярное выражение, например:

var string = JSON.stringify(req.body.wind_direction)
string = string.replace(/[\[\]"]+/g,'').split(",")
var reg = ""
for(var i = 0; i < string.length; i++){
   reg += "\b" + string[i] + "\b|";
}
reg = "/" + reg.substring(0, reg.length - 1) + "/";
query.wind_direction = { "$regex": reg, "$options": "i" }

Когда я console.log мой запрос выглядит так:

{ wind_direction: { '$regex': '/\bW\b|\bWNW\b|\bNW\b/', '$options': 'i' } }

Затем, когда я запускаю простой запрос с Place.find (query, function (req, res ...), он не возвращает результатов. Но когда я проверяю свое регулярное выражение в онлайн-тестере регулярных выражений, оно работает.

1 Ответ

0 голосов
/ 06 ноября 2018

Похоже, что ваш req.body.wind_direction уже является массивом, который вы можете использовать для построения шаблона чередования, нет необходимости JSON.stringify в этом массиве. Чтобы построить чередование, вы можете использовать arr.join("|").

Чтобы не повторять \b, вы можете сгруппировать все альтернативы, и группа без захвата подходит здесь лучше всего: \b(?:term1|term2|termN)\b.

Вы можете использовать

query.wind_direction = { "$regex": new RegExp("\\b(?:" + req.body.wind_direction.join("|") + ")\\b"), "$options": "i" } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...