javascript - Mongoose 设计模型中的嵌入式文档与引用?

标签 javascript node.js mongodb express mongoose

假设我正在使用 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/

相关文章:

javascript - EmberJS : Unit test class-based helpers

javascript - 使用 JEST 测试 DOM 元素

angularjs - 如果元素包含值,如何在 Protractor 中退出测试用例

php - MongoDB 选择排序问题

javascript - 未捕获的语法错误 : Unexpected token -

javascript - 如何检查一个 Javascript 类是否继承了另一个类(不创建对象)?

javascript - 按属性值对 JavaScript 对象数组进行排序

node.js - 如何在 React/NodeJS 身份验证流程中使用 httpOnly cookie 获取用户数据

javascript - Meteor-Simple-Schema 中 Date.now() 的架构字段类型

javascript - 如何在mongodb数据库上存储setTimeout id?