在我的Mongoose架构中添加一个数组

时间:2014-10-14 15:38:15

标签: node.js mongodb mongoose

我有以下架构,我试图在我的博客帖子架构中添加一系列评论,然后在评论架构中我需要添加与每个特定评论相关的图片网址数组。我已经研究过这个网站,发现这个链接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);

1 个答案:

答案 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'}
});
希望有所帮助。