Javascript MongoDB最佳实践-一对多关系

Javascript MongoDB最佳实践-一对多关系,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,根据这篇文章,我应该嵌入一个“参考”: User.js Event.js 因此,数据库中的嵌入式事件如下所示: 我的代码可以工作,但我很好奇这是否是嵌入事件的正确方法。因为一对多关系的每个例子都是用引用而不是嵌入的。根据我的经验,使用嵌入或引用取决于我们处理的数据量 在决定选择哪种方法时,您应始终考虑: 1-一对几个:如果您将随着时间的推移向用户添加少量事件,我建议您选择更简单的方法 2-一对多:如果经常添加新的事件,则完全应该选择,以避免将来出现性能问题 为什么? 当您经常添加新的事件时,如

根据这篇文章,我应该嵌入一个“参考”:

User.js Event.js 因此,数据库中的嵌入式事件如下所示:


我的代码可以工作,但我很好奇这是否是嵌入事件的正确方法。因为一对多关系的每个例子都是用引用而不是嵌入的。

根据我的经验,使用嵌入引用取决于我们处理的数据量

在决定选择哪种方法时,您应始终考虑:

1-一对几个:如果您将随着时间的推移向用户添加少量事件,我建议您选择更简单的方法

2-一对多:如果经常添加新的事件,则完全应该选择,以避免将来出现性能问题

为什么?

当您经常添加新的事件时,如果这些事件嵌入到用户文档中,则该文档将随着时间的推移越来越大。将来,您可能会面临I/O开销之类的问题。在本文中,您可以瞥见大型阵列的弊端。虽然很难在任何地方找到它,但MongoDB中的大型阵列被认为是一种性能反模式

如果你决定选择引用,我建议你阅读。本文可以让您了解如何以非关系方式设计用户事件集

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const userSchema = new Schema({
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    createdEvents: ['Event']
});

module.exports = mongoose.model('User', userSchema);
const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const eventSchema = new Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true
    },
    date: {
        type: Date,
        required: true
    }
});

module.exports = mongoose.model('Event', eventSchema);