node.js - 在我的 Mongoose 模式中添加一个数组

标签 node.js mongodb mongoose

我有以下模式,我试图在我的博客文章模式中添加一组评论,然后在评论模式中我需要添加一组与每个特定评论相关的图片 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/

相关文章:

javascript - Discord.js 嵌入后发送文件

node.js - 通过node.js在另一个目录中运行npm install

node.js - Nodejs MongoDB 查询无法按预期工作

mongodb - Elasticsearch mongo-connector KeyError _id

node.js - NodeJS、Mongoose - 插入数据时出现重复条目

node.js - 模块化编程和 Node

node.js - Nodejs 与 ES6 导入

node.js - 运行 node.js 代码只显示一个 Node 标识符

mongodb - LabVIEW MongoDB

mongodb - MongoDB 的更新原子性是否适用于查询和修改?