Как использовать query mongoose, используя оператор LIKE, аналогичный SQL?

#javascript #mongodb #express #mongoose

#javascript #mongodb #выражать #мангуст #экспресс #mongoose

Вопрос:

Я пытаюсь запросить свою базу данных для поиска продуктов на основе названия и категории. Я хочу, чтобы база данных возвращала массив продуктов, когда пользователь выполняет поиск чего-либо, эта строка должна соответствовать либо категории обработки, либо типу, либо имени. Я делаю следующее

 Product.find(
    {
      $or: [
        {
          name: /box/,
          type: /box/,},
          ],
        },
        function (err, results) {
          console.log(err);
          console.log(results);
        }
      );
  

Я не могу использовать свой переменный блок в:

имя: /box/

Я пробовал «/» box «/» и помещал свою переменную в // при ее создании, но ничего из этого не работает.

Как мне использовать оператор like для запроса моей базы данных?

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

1.Вы можете определить переменную следующим образом: const boxVar = /box/ и использовать переменную в запросе как, name: boxVar, .

Ответ №1:

Похоже, что в $or синтаксисе оператора также есть ошибка. Каждое выражение должно содержать отдельные фигурные скобки. Также, поскольку вы используете mongoose, вы можете использовать регулярное выражение, как показано ниже. Параметр $ используется для того, чтобы сделать поиск нечувствительным к регистру.

 Product.find(
  {
    $or: [
      {
        name: { $regex: "box", $options: "i" },
      },
      { type: { $regex: "box", $options: "i" } },
    ],
  },
  function (err, results) {
    console.log(err);
    console.log(results);
  }
);
  

Ответ №2:

Используйте конструктор регулярных выражений

 key: new RegExp(box),
  

Подробнее о регулярном выражении

Ответ №3:

Я думаю, что вы пытаетесь сделать, это использовать оператор $or . Синтаксис такой:

 Product.find(
    {
      $or: [
        {name: /box/},
        {type: /box/}
      ]
    });