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

MCh*_*han 3 mongoose mongodb node.js

我有以下架构,我试图在我的博客帖子架构中添加一个注释数组,然后在注释架构中我需要添加与每个特定注释相关的图片网址数组.我研究了网络,发现这个链接嵌入文档到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);
Run Code Online (Sandbox Code Playgroud)

jac*_*per 5

这里有两个常见的场景,您希望如何处理您的信息

嵌入式文件:

如果你有可能做更多的读取而不是写入,建议在这种情况下遵循这种方法,你的模型可能是这样的:

var comments = new Schema({
    subject: String,
    body: String,
    date: {
        type: Date,
        default: Date.now
    },
    pictures:[{
        picURL: String,
        date: {
            type: Date,
            default: Date.now
        }
    }]
});
Run Code Online (Sandbox Code Playgroud)

而你对我的态度还可以,应该在没有潜在问题的情况下运行3.8.

参考文件:

如果你有更多的写入而不是读取,你可以使用不同的集合来分割信息并引用你的objectId,如:

var comments = new Schema({
    subject: String,
    body: String,
    date: {
        type: Date,
        default: Date.now
    },
    pictures: [
            {type: Schema.Types.ObjectId, ref: 'pictures'}
    ]
});
Run Code Online (Sandbox Code Playgroud)

您需要将每个模式分离为自己的模式,并为评论和图像设置模型.

无论哪种方式都有效,如果你问我个人偏好是采用嵌入式文档方法.

编辑:

这种情况可以应用于集合之间的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
            }
        }]
    }]
});
Run Code Online (Sandbox Code Playgroud)

引用:

var blogpost = new Schema({
    title: String,
    body: String,
    date: {
        type: Date,
        default: Date.now
    },
    comments:type: Schema.Types.ObjectId, ref: 'comments'}
});
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.