编辑新闻/媒体网站,我想要一个"新闻"部分,"评论"部分,a "趋势"部分,结合了前面几节,就像这里: 我为"新闻"制作了一个模式,一个用于"评论"。我如何制作一个"趋势"部分(如上图所示"电影"部分)? 代码: 在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方法可以找到来自"新闻"和"评论"建立"趋势"部分(就像在第1张图片中一样)?
答案 0 :(得分:1)
从我的代码中可以看到,您当前的News
和Review
架构看起来很不错。
您需要为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
集合将按照News
的顺序包含新保存的Review
或created
。因此,您将能够获得新的Review
或News
帖子。
在提取Trending
时,您可以populate
使用News
或Review
Schema
postType
{/ 1}}。
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
类型。
希望这就是你想要的。