MongoDB-如何组织集合

MongoDB-如何组织集合,mongodb,Mongodb,这里只是一个一般性的问题-我正在对MongoDB进行一些自主学习,为了能够顺利起步,我想就如何组织示例预算应用程序的集合发表意见 与任何住房预算一样,我有“类别”,如住房、汽车,在这些类别下我也有子类别,如抵押贷款和汽车付款 每张账单都有到期日、最低到期金额、预测付款、预测付款日期、实际付款和实际付款日期 每张账单都是由“某人”支付的,例如房屋、抵押贷款可能是由美国银行支付的,美国银行可能有联系信息(电话、邮寄地址) 从表结构切换到Mongo有点让人困惑,所以我很欣赏大家对如何实现这一点的看法。

这里只是一个一般性的问题-我正在对MongoDB进行一些自主学习,为了能够顺利起步,我想就如何组织示例预算应用程序的集合发表意见

与任何住房预算一样,我有“类别”,如住房、汽车,在这些类别下我也有子类别,如抵押贷款和汽车付款

每张账单都有到期日、最低到期金额、预测付款、预测付款日期、实际付款和实际付款日期

每张账单都是由“某人”支付的,例如房屋、抵押贷款可能是由美国银行支付的,美国银行可能有联系信息(电话、邮寄地址)


从表结构切换到Mongo有点让人困惑,所以我很欣赏大家对如何实现这一点的看法。

这个问题非常笼统。一般来说:),以下原则适用于MongoDB中的模式设计:

  • 收藏品的布局应遵循声音建模原则。使用MongoDB,您可以拥有更接近数据对象结构的模式,而不是数据的关系“投影”

  • 集合的布局应遵循数据访问模式(有时可能与前面的语句冲突)。设计您的模式,这样您就可以在尽可能少的查询中获得所需的信息,而不会将不需要的太多数据加载到应用程序中

  • 您通常可以而且应该“去规范化”以实现上述两个目标。MongoDB一点也不坏。非规范化的缺点是更新变得更加昂贵,您需要确保保持一致性。但这些缺点往往被更自然的建模和更好的读取效率所抵消


从您上面的描述来看,听起来您已经想到了一个相当“关系”的模型。试着摆脱它,用一个新的思维来处理这个问题。思考对象,而不是表格。

因此,思考“对象”是我的问题所在。在所有这些字段中,我不确定哪个是根对象。我在交易本身和收款人之间左右为难。客观地思考意味着尽可能自然地思考:)通常没有单一的解决方案。尝试几种不同的方法,浏览系统的典型操作,看看如何在给定模型中实现它们。感觉最自然的(我敢说是优雅的)是对的。当然,它也应该很快:)从阅读数据建模文档开始:有很多选项,并非所有选项都适合您的需求。