Mongoose: Как запустить collection.find () для нескольких типов запросов, один из которых включает поиск по ключевым словам? - PullRequest
0 голосов
/ 08 ноября 2019

Я беру свой первый класс JavaScript и пытаюсь создать веб-приложение, в котором я могу искать конкретную информацию (база данных в mongoDB) через форму веб-браузера.

Вот как выглядит моя схема данных (упрощенно и показывает только соответствующие поля):

const Posts = new mongoose.Schema({
  postType: {type: String, required: true}, // "Mentee" or "Mentor"
  area: {type: String, required: true}, // "Academics" or "Career"
  postName: {type: String, required: true}, // "Should I .... ?"
});

В настоящее время моя форма позволяет пользователю искать максимум три критерия (как показано выше),которые postType, area, postName. Пользователь может искать только 1 свойство до 3 свойств! Если пользователь ничего не ищет, Интернет должен вернуть ВСЕ результаты!

Вот мой код для .find().

app.get('/', (req, res) => {
  const queryObj = {};
  if (req.query.postNameQ) {
    queryObj.postName = req.query.postNameQ;
  }
  if (req.query.postTypeQ) {
    queryObj.postType = req.query.postTypeQ;
  }
  if (req.query.areaQ) {
    queryObj.area = req.query.areaQ;
  }
  Posts.find(queryObj, (err, found) => {
    if (err) {
      // error handling
    }
    console.log('queryObj: ', queryObj);
    res.render('home', {found: found,
      timesAccessed: req.session.timesAccessed});
  });
});

Я достиг точки, где я могу искать результатыэто "точно" соответствует тому, что я напечатал в моей форме. Например, если я ищу postType=Mentee, я могу получить результаты, чей postType равен Mentee, но если я ищу postType=Men, я не получу никакого результата.

Однако я хочу иметь возможность получать результаты, чье (заданное) свойство включает в себя все, что вставлено в форму, без «точного» соответствия результатов. Например, я могу искать сообщения, чьи postName содержат «Должен ли я», потому что теперь, если я введу «должен я», ничего не появится, поскольку все сообщения «1022 * не точно совпадают»Должен ли я '.

прочитать статьи SO, решение которых заключается в использовании чего-то вроде db.collection.find( {propertyName: { $regex: "Programming"} } );, что я могу сделать, если я ищу только одно свойство схемы. НО, поскольку я хочу искать одноили несколько объектов, я не могу.

Пожалуйста, помогите, и большое спасибо за вашу помощь!

...