我有以下模式,我试图在我的博客文章模式中添加一组评论,然后在评论模式中我需要添加一组与每个特定评论相关的图片 url。我研究了网络并找到了这个链接 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);
最佳答案
这里有两种常见情况,您希望如何处理您的信息
嵌入文档:
如果您的读取次数可能多于写入次数,建议采用这种方法,在这种情况下您的模型可能如下所示:
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'}
});
希望对您有所帮助。
关于node.js - 在我的 Mongoose 模式中添加一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364764/