2017-01-27 19 views
0

编码新闻/媒体网站,我希望有一个“新闻”栏目,“评论”部分, “趋势”部分,它结合了前面的章节中,就像这里: enter image description here 我已经一个用于“新闻”的模式,一个用于“评论”。如何制作“趋势”部分(如“电影”部分上方的图片)? 代码: 在app.js,MongoDB的架构定义

//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方法可以从“新闻”和“评论”中找到最新的帖子来构建“趋势”部分(就像第一张图片一样)?

+0

您是否定义了趋势科的模式? –

+0

另外,你能告诉我审查和新闻的模式,以便我可以帮助你与趋势部分。 –

+0

我还没有为趋势部分定义架构。我已经更新了问题中的代码。 – eknoor4197

回答

1

从我的代码中可以看到,您当前的NewsReview架构看起来很好。

您需要为Trending定义另一个Schema

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

同时节约新NewsReviews,插入新保存文件的_idtrending收藏。

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 
    } 
}); 

同样,同时节省审查后

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收集将包含新保存NewsReview,在他们created的顺序。因此,您将能够获得新的ReviewNews后。

在拿Trending,您可以使用NewsReviewSchema基础上,postTypepopulate他们。现在

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 
    } 
}); 

可以显示最新NewsReview和写入类型postType

希望这是你想要的。