Как показать все данные и отфильтровать их в mongoose и mongodb?

Я пытаюсь получить все данные из базы данных mongo, но хочу специально отфильтровать их.

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

 router.get('/portfolio/:id', function(req, res, next) {
  Work.findById(req.params.id, function(err, foundWork) {
    console.log(foundWork)

    if (err) {
      console.log(err);
    } else {
      res.render('portfolio', {
        title: 'Portfólio',
        work: foundWork
      });
    }
  });
});

Рисунок

FindById показывает только результат одного конкретного проекта.

Спасибо за вашу помощь

ИЗМЕНИТЬ ------------------------------------------------- ----

Поэтому я изменил код, чтобы получить все данные из БД и отфильтрованный элемент, который мне нужен по идентификатору. Я не могу разобрать данные до ejs. Когда я данные console.log в nodejs, я получаю данные. Когда я консоль вхожу в ejs, я получаю undefined.

Вот картинка, которую я получаю в nodejs.

Console.log

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

какие картинки? Пожалуйста, обновите свой вопрос

Manish Kumawat 13.09.2018 19:37

Извините, я загрузил картинку

David Karabin 13.09.2018 19:59

лучше всего использовать .find(, чтобы получить все элементы, а затем отфильтровать с помощью метода js .filter отдельно элемент, по которому щелкнули, и все другие элементы

givehug 13.09.2018 21:12

Я сделал то, что ты сказал. Он работает на стороне javascript, но не работает на стороне ejs. Я получаю undefined, когда иду в consolelog из ejs, но когда я consolelog в nodejs, я получаю то, что мне нужно.

David Karabin 14.09.2018 12:56

Вот мой код: code router.get ('/ портфолио /: id', function (req, res, next) {Work.find ({}, function (err, foundWork) {if (err) {console.log ( err);} else {res.render ('портфолио', {title: 'Portfólio', work: foundWork, findOne: foundWork.filter (work => work._id == req.params.id)});}} );}); code

David Karabin 14.09.2018 12:57

какова структура этого ответа "foundWork"?

Manish Kumawat 14.09.2018 15:14

Я обновил вопрос. Спасибо за вашу помощь до сих пор

David Karabin 14.09.2018 17:54
0
7
373
2

Ответы 2

Так что я сам в этом разобрался.

Я сделал, как сказал пользователь givehug. Это сработало, но затем мне пришлось снова перебирать отфильтрованные элементы в ejs, несмотря на то, что есть только один элемент. EJS не знает, сколько элементов осталось в отфильтрованном массиве, поэтому я прошел через цикл. Вытащил один элемент, затем отрендерил его, и он сработал.

вам нужно добавить новое свойство в вашу схему, чтобы классифицировать вашу работу. Например,

в вашей схеме:

{workType:{type:String}} //either required or no

когда вы публикуете свои данные, добавьте и это свойство

{workType:"other"} //i just made it up

запрос вроде этого:

const other=await Work.find({workType:"other"})

теперь вы получите нужные вам данные.

Другие вопросы по теме