#node.js #mongodb #mongoose #mongodb-query #aggregation-framework
#node.js #mongodb #мангуст #mongodb-запрос #агрегация-фреймворк
Вопрос:
У меня есть коллекция ЗАКАЗОВ, которая похожа:
_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Mumbai City"
totalCost:96
_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Delhi"
totalCost:96
Затем в моем API я получаю данные в виде массива:
driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred']
Теперь, как мне запросить мою коллекцию ЗАКАЗОВ, а затем проверить, ORDER.city
присутствует ли в качестве подстроки моя driverCity
переменная с помощью регулярного выражения? это означает, что если подстрока типа «mumbai» присутствует в ORDER.city
, а также в этом массиве, я хочу получить этот результат.
Ответ №1:
Если вы запрашиваете драйвер MongoDB для Nodejs, вы можете выполнить запрос регулярных выражений без учета регистра:
const driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred'];
db.collection("ORDERS").find({
city: new RegExp(driverCity.map(city => `(${city})`).join('|'),'i')
})
ПРИМЕЧАНИЕ: запросы регулярных выражений в mongodb (или где угодно, на самом деле) немного тяжеловаты и могут быть медленными и ресурсоемкими. Я бы рекомендовал, чтобы ваш city
ключ в коллекции ЗАКАЗОВ был проиндексирован.
Комментарии:
1. и как мне поступить наоборот?? я имею в виду, если driverCity =’Mumbai City’ и order имеют город ‘Мумбаи’, просто любопытно 🙂
Ответ №2:
Соедините элемент массива с |
и создайте строку, используйте $regex, чтобы получить соответствующий город,
let driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred'].join("|");
// "Mumbai|Ahmednagar|Yavatmal|Warud|Umred"
db.collection.find({
city: {
$regex: driverCity
}
})
Комментарии:
1. круто и как мне сделать наоборот?? я имею в виду, если driverCity=’Mumbai City’ и order имеют город ‘Мумбаи’
2. mongoplayground.net/p/yUv4wUU6G5z вот ссылка, по которой я играл с ней, но, похоже, другой способ не работает: (