2017-01-27 21 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

希望這是你想要的。