Я пытаюсь получить все данные из базы данных 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.
Я заметил, что, просматривая отфильтрованный элемент, я получаю все данные, которые мне нужны. Я не думаю, что правильно перебирать данные, когда я только разбираю один элемент в ejs.
Извините, я загрузил картинку
лучше всего использовать .find(
, чтобы получить все элементы, а затем отфильтровать с помощью метода js .filter
отдельно элемент, по которому щелкнули, и все другие элементы
Я сделал то, что ты сказал. Он работает на стороне javascript, но не работает на стороне ejs. Я получаю undefined, когда иду в consolelog из ejs, но когда я consolelog в nodejs, я получаю то, что мне нужно.
Вот мой код: 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
какова структура этого ответа "foundWork"?
Я обновил вопрос. Спасибо за вашу помощь до сих пор
Так что я сам в этом разобрался.
Я сделал, как сказал пользователь givehug. Это сработало, но затем мне пришлось снова перебирать отфильтрованные элементы в ejs, несмотря на то, что есть только один элемент. EJS не знает, сколько элементов осталось в отфильтрованном массиве, поэтому я прошел через цикл. Вытащил один элемент, затем отрендерил его, и он сработал.
вам нужно добавить новое свойство в вашу схему, чтобы классифицировать вашу работу. Например,
в вашей схеме:
{workType:{type:String}} //either required or no
когда вы публикуете свои данные, добавьте и это свойство
{workType:"other"} //i just made it up
запрос вроде этого:
const other=await Work.find({workType:"other"})
теперь вы получите нужные вам данные.
какие картинки? Пожалуйста, обновите свой вопрос