MongoDB использует регулярное выражение для запроса массива строк и поиска документа

#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 вот ссылка, по которой я играл с ней, но, похоже, другой способ не работает: (