假设我正在使用 Node.js 和 Mongoose 构建一个讨论论坛。一个用户可以有多个论坛,一个论坛可以有多个评论。用户也可以邀请其他用户加入论坛。因此,我的问题是关于使用引用或嵌入式文档的模型设计!
如果我使用嵌入式文档,它看起来像:
var Comment = new Schema({ ... });
var Forum = new Schema({
title: {type: String},
content: {type: String},
comments: [Comment],
attendees: [User]
});
var User = new Schema({
name: {type: String},
email: {type: String},
forums: [Forum]
});
var Account = mongoose.model('Account', User);
使用上述设计,我遇到了以下问题:当用户向论坛添加评论时,该论坛在我的论坛中,我认为我无法在我的论坛列表中获得新评论的更新.我呢?您知道如何让嵌入文档在这种情况下工作吗?
因此,我想到了在 mongoose 中使用 reference。在本例中,我将有两个集合:帐户 和论坛。在这种情况下,向论坛添加新评论不是问题。我说得对吗?
对于此应用,引用是否比嵌入文档更好?
提前致谢
最佳答案
这主要取决于您将如何查询和更新数据。在这种情况下,一致性和文档大小也很重要。以下是关于何时引用或嵌入文档的一个很好的总结:
嵌入:
- 小子文档
- 不定期更改的数据
- 最终一致性是可以接受的
- 小量增长的文档
- 您经常需要执行第二个查询来获取的数据
- 快速阅读
引用:
- 大型子文档
- volatile 数据
- 需要立即一致
- 增长量大的文件
- 您经常会从结果中排除的数据
- 快速写入
这是我读过的一本关于 mongo 的书的摘录。这些只是一般规则,但根据我的经验,在大多数情况下,使用它们可以非常清楚是引用还是嵌入。
在这种情况下,我宁愿引用论坛。但请考虑您的所有要求。例如,如果您从用户引用论坛并且您需要查询特定论坛的所有用户,在这种情况下查询可能会很慢。如果我是你,我会列出我需要的一切,然后使用一般规则在嵌入和引用的利弊之间找到平衡。
希望对您有所帮助!
关于javascript - Mongoose 设计模型中的嵌入式文档与引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21302279/