Как я могу сделать запрос с несколькими вариантами с драйвером mongodb для nodejs? - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю в запросе MongoDB с Nodejs, и у меня есть проблема, которую я не могу решить.

Предположим, у нас много документов в Монго, и у каждого документа есть массив тегов

tags: [tag1, tag2, tag3]

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

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

Привет

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Здесь в игру вступает агрегатная функция mongodb.

Допустим, есть база данных, называемая книгами, и мы хотим получить книги, содержащие в себе, скажем, ['fantasy', 'sci-fi']жанры

db.book.aggregate([{
   $match:{
     genres:{
      $in:['fantasy', 'sci-fi']
      }
   }
}])

это даст желаемый результат, найдя все книги, содержащие либо фантастику, либо scifi

db.book.aggregate([{
   $match:{
     genres:{
      $all:['fantasy', 'sci-fi']
      }
   }
}])

Это позволит получить все книги, имеющие жанры с обоими фантазиямии sf

db.book.aggregate([{
   $match:{
     genres:{
      $nin:['fantasy', 'sci-fi']
      }
   }
}])

При этом будут выбраны все книги, у которых нет этих значений

0 голосов
/ 26 апреля 2019

генерирует $ или условие в вашем коде в соответствии с параметрами:

let or_array = [];
params.forEach(params, (tag_param) => {
       or_array.push({tags: tag_param})
     });
let or_cond = {$or: or_array};

теперь нам просто нужен простой запрос на поиск для получения документов:

  let results = model.find(or_cond); 

результаты должны содержатьтребуемые документы.

** обратите внимание, что $ or требует наличия не пустого массива, поэтому вы должны проверить, что хотя бы один параметр получен со стороны клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...