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