Как создать динамический c запрос в MongoDB? - PullRequest
1 голос
/ 03 марта 2020

Я пытался написать динамический c запрос в пн goose, но не смог найти способ достичь своей цели.

Я хочу запрограммировать видео платформу, которая включает в себя расширенное видео функция поиска. Вот фрагмент моего кода:

router.get("/search/video", async (req, res) => {
  let category = JSON.parse(req.query.category); // Array
  let searchOrder = req.query.searchOrder; // String
  let searchText = req.query.searchText; // String
  let channel = req.query.channel; // String

  //query, if all parameters are provided

  Video.find({
    $text: { $search: searchText, $language: "en" },
    category: { $elemMatch: { categoryID: { $in: category } } },
    channelID: channel,
  }).sort({ date_added: searchOrder });
});

Однако, если пользователь не хочет искать определенную категорию c или не указывает канал, ноль передается, и подходящее видео не может быть нашел. Я пытался использовать строку, но она не работает с model.findOne (). Как я могу запрограммировать динамический c запрос, который работает в зависимости от заданных параметров?

Заранее спасибо!

1 Ответ

2 голосов
/ 03 марта 2020

Просто создайте этот объект запроса из битов запроса, игнорируя те, которые были бы ошибочными:

const query = {};
if (searchText) {
  query.$text = { $search: searchText, $language: "en" };
}
if (category && category.length) {
  query.category = { $elemMatch: { categoryID: { $in: category } } };
}
if (channel) {
  query.channelID = channel;
}

Video.find(query).sort({ date_added: searchOrder });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...