Mongodb находит, присутствует ли значение документа в виде подстроки

#node.js #mongodb #mongodb-query #aggregation-framework #mongoose-schema

#node.js #mongodb #mongodb-запрос #агрегация-фреймворк #мангуст-схема

Вопрос:

У меня есть коллекция ЗАКАЗОВ, которая похожа:

 _id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Mumbai"
totalCost:96

_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Delhi"
totalCost:96
  

Затем в моем api у меня есть такие данные, как

  cityInOrder='Mumbai City'
  

итак, как мне узнать весь заказ из моей коллекции заказов, в которых order.city является подстрокой в «cityInOrder»

это означает, что в моей первой коллекции город «Мумбаи», поэтому данные, которые я получил, — это «Город Мумбаи», поэтому я должен вернуть этот документ

Я пытался, как

 db.collection('orders').find({
  city: {
    $regex: cityInOrder
  }
})
  

но, похоже, это работает наоборот: (а также не должно учитываться регистр

Комментарии:

1. Был ли ответ полезным?

Ответ №1:

Есть несколько проблем.

  1. Вы используете regex опцию, в которой вам нужен вариант использования поиска.
  2. Вы ожидаете поиск без учета регистра.

Вы можете сделать несколько вещей.

  1. Если вам нужны варианты использования поиска и вы используете atlas, вы можете использовать search функциональность atlas.

  2. Если у вас нет atlas и вам нужно соответствовать этим критериям, вы можете сделать, как показано ниже.

Вы можете использовать i опцию регулярного выражения, чтобы избежать учета регистра. Вы должны разделить входные слова пробелом и сделать or запрос, чтобы соответствовать либо Mumbai или city

Пробная демонстрация

Я бы предложил использовать вариант 1. Если это только город, и вам всегда нужно сопоставлять первый термин, вы можете попробовать второй вариант, в котором задействованы некоторые хаки.