Intereting Posts
Как отобразить несколько файлов .ejs в вложенной форме в Node.js и Express? Устранение асинхронной функции Graphql не может вернуть данные, запрошенные сервером Stardog с данными rdf Кордова after_prepare перехватывает Android, но не работает в iOS Как написать streamобезопасный код в node.js Node.JS проверить токен аутентификации Google Ошибка тайм-аута Express, всегда возвращающая ответ, когда принудительная блокировка Невозможно использовать сторонний модуль с AWS Lambdas макет модуля, которого нет? Почему http-auth не работает с промежуточным программным обеспечением express.static? Как получить измененный выход json от MongoDB + Node.js + Mongoose В amazon lambda, изменяя размеры нескольких миниатюр в параллельных асинхронных бросках Ошибка: Stream дает пустой буфер Ошибка авторизации хранилища Azure или формат неправильный Перенесите файлы в Dropbox с узла js без аутентификации на основе браузера Как использовать массив обратного вызова в качестве обработчика для маршрута Sails.js? Как зарегистрироваться в Node.js с помощью Express для ELK?

Определение схемы Mongodb

Кодируя новостной / медиа-сайт, я хочу раздел «Новости», раздел «Отзывы», раздел «Тенденции», который объединяет оба предыдущих раздела, как здесь: введите описание изображения здесь Я сделал одну схему для «новостей», одну для «Обзоров». Как я могу создать раздел «Тенденции» (как на изображении выше раздела «Фильмы»)? Код: В app.js,

//LANDING PAGE app.get('/', function (req, res,next) { Blogdemo.find({}).sort([['_id', -1]]).limit(3).exec(function(err,allBlogs) { //finds latest posts for 1st Schema (upto 3) if(err) { console.log(err); next(); } else { res.locals.blog = allBlogs; // res.render("landing", {blog : allBlogs , moment : now}); next(); } }) }, function (req, res) { Review.find({}).sort([['_id', -1]]).limit(3).exec(function(err,allReviews) { //finds latest posts of 2nd Schema if(err) { console.log(err); } else { res.locals.review = allReviews; res.render("landing", res.locals); } }) }) 

В review.js,

  var mongoose = require("mongoose"); //SCHEMA SETUP var reviewSchema = new mongoose.Schema({ image : String, title : String, body : String, rating : String, created : {type : Date, default : Date.now()}, comments: [ { type: mongoose.Schema.Types.ObjectId, ref: "Comment" //name of the model } ] }) module.exports = mongoose.model("review", reviewSchema); 

Схема «Новости» почти такая же (без обзора). Является ли мой способ определения схемы неправильным? Если нет, то как я могу построить раздел «Тенденции»?

Есть ли способ mongodb, который может найти последние сообщения из «Новости» и «Обзоры», чтобы создать раздел «Тенденции» (как на первом рисунке)?

Из того, что я вижу из вашего кода, ваша текущая News and Review Schema выглядит отлично.

Вам нужно определить другую Schema для Trending .

 var TrendingSchema = new mongoose.Schema({ referenceId : { type : mongoose.Schema.Types.ObjectId }, postType : String //To store News or Reviews }); 

Сохраняя новые News или Reviews , вставьте _id вновь сохраненного документа в коллекцию trending .

 var news = new News(); news.image = newsImage; ... news.save(function(err,result) { if(!err) { var trending = new Trending(); trending.referenceId = result._id; trending.postType = "News"; treding.save(function(err) { if(!err) { //success response } else { //error response } }); } else { //send error response } }); 

Аналогично, сохраняя сообщение Review Post

 var review = new Review(); review.image = reviewImage; ... review.save(function(err,result) { if(!err) { var trending = new Trending(); trending.referenceId = result._id; trending.postType = "review" treding.save(function(err) { if(!err) { //success response } else { //error response } }); } else { //send error response } }); 

Таким образом, теперь Trending Collection будет содержать недавно сохраненные News или Review в том порядке, в котором они created . Таким образом, вы сможете получить новый Review или News пост.

Приобретая Trending , вы можете populate их с помощью функции « News или « Review на основе postType .

 Trendign.find({}).limit(10).exec(function(err,result) { if(!err && result.length!=0) { var trendingPosts = []; result.forEach(function(trending){ if(trending.postType === "News"){ trending.populate({path : 'referenceId',model : 'News'},function(err,populatedItem) { if(!err) { trendingPosts.push(populatedItem); } }); } else if(trending.postType === "Review"){ trending.populate({path : 'referenceId',model : 'Review'},function(err,populatedItem) { if(!err) { trendingPosts.push(populatedItem); } }); } }); //now send the trendingPost array with latest News and Review Posts } else { //send Error response } }); 

Теперь вы можете показать последние News или Review и написать тип postType .

Надеюсь, это то, что вы хотите.