根据这篇文章,我应该嵌入“参考”:MongoDB relationships: embed or reference?
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);
因此,嵌入式事件在数据库中如下所示:
我的代码可以正常工作,但我不奇怪这是否是嵌入事件的正确方法。因为一对多关系的每个示例都是由引用构成的,而不是嵌入的。
答案 0 :(得分:1)
根据我的经验,使用嵌入或引用取决于我们处理的数据量。
在决定选择哪种方法时,您应该始终考虑:
1- 很少见:如果您随时间将少量事件添加到用户,我建议您选择embedding方法,因为它更易于处理。
2- 一对多::如果经常添加新的事件,则完全应该使用referencing以避免将来出现性能问题。>
为什么?
当您频繁添加新的事件时,如果它们嵌入在用户文档中,则该文档会随着时间的流逝而变得越来越大。将来您可能会遇到诸如I / O开销之类的问题。您可以在文章Why shouldn't I embed large arrays in my documents?中瞥见大型数组的弊端。尽管很难在任何地方编写它,但是MongoDB中的大型数组被认为是一种性能反模式。
如果您决定推荐,我建议您阅读Building with Patterns: The Bucket Pattern。本文可以使您了解如何以非关系方式设计 user_events 集合。