我有以下架构,我试图在我的博客帖子架构中添加一系列评论,然后在评论架构中我需要添加与每个特定评论相关的图片网址数组。我已经研究过这个网站,发现这个链接embedded documents到了mongoose文档,但是注意到它与mongoose 2.7版有关,而我们目前的版本是3.8。所以我想知道我做得对吗?如果没有,有人可以通过建议设计我的博客帖子架构的最佳方式来帮助我,以便它包括博客文章评论数组以及与每个相关的图片数组评论。感谢您的时间和精力。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var pictures = new Schema({
picURL: String,
date: {
type: Date,
default: Date.now
}
});
var comments = new Schema({
subject: String,
body: String,
date: {
type: Date,
default: Date.now
},
pictures:[pictures]
});
var blogpost = new Schema({
title: String,
body: String,
date: {
type: Date,
default: Date.now
},
comments:[comments]
});
module.exports = mongoose.model('BlogPost', blogpost);
答案 0 :(得分:5)
此处有两种常见方案,您希望如何处理信息
嵌入式文档:
如果您可能执行的读取次数多于写入次数,则建议您遵循此方法,在这种情况下,您的模型可能如下所示:
var comments = new Schema({
subject: String,
body: String,
date: {
type: Date,
default: Date.now
},
pictures:[{
picURL: String,
date: {
type: Date,
default: Date.now
}
}]
});
并且你对我的态度还可以,应该在没有潜在问题的情况下运行3.8。
参考文件:
如果你有更多的写入而不是读取,你可以使用不同的集合来分割信息并引用你的objectId,如:
var comments = new Schema({
subject: String,
body: String,
date: {
type: Date,
default: Date.now
},
pictures: [
{type: Schema.Types.ObjectId, ref: 'pictures'}
]
});
您需要将每个架构分离为自己的架构,并为评论和图像设置模型。
如果你问我个人偏好是采用嵌入式文档方法,两种方式都是有效的。
修改强>
这种情况可以应用于集合之间的N个关系,我保持两个关系的简单,但对于你来说,情况可能是这样的:
var blogpost = new Schema({
title: String,
body: String,
date: {
type: Date,
default: Date.now
},
comments: [{
subject: String,
body: String,
date: {
type: Date,
default: Date.now
},
pictures:[{
picURL: String,
date: {
type: Date,
default: Date.now
}
}]
}]
});
引用:
var blogpost = new Schema({
title: String,
body: String,
date: {
type: Date,
default: Date.now
},
comments:type: Schema.Types.ObjectId, ref: 'comments'}
});
希望有所帮助。