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

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

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

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

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

Рисунок

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

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

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

Поэтому я изменил код, чтобы получить все данные из БД и отфильтрованный элемент, который мне нужен по идентификатору. Я не могу разобрать данные до ejs. Когда я данные console.info в 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.info ( 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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"})

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

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