对象的MongoDB关系

请原谅我的英语,我仍然想要掌握它。

我已经开始学习MongoDB(来自C#背景),我喜欢MongoDB的想法。 我在互联网上有一些例子。

以流行的博客文章/评论为例。 post没有或与之相关的许多评论。 我创建Post对象,向Post中的IList添加一些Comment对象。 没关系。

我是否只将其添加到MonoDB中的“post”集合中,还是应该有两个集合 – 一个是blog.posts和blog.posts.comments?

我有一个公平复杂的对象模型,最简单的方法是将其视为银行系统 – 我们的是采矿业。 我试图用方括号突出显示表格。

[用户]有一个或多个[帐户]有一个或多个[交易] ,其中只有一个[类型][Transactions]可以为交易分配一个或多个[Tag][用户]创建他们自己的[标签]对该用户帐户是唯一的,我们有时需要提供这些标签的报告(例如,5月,标签钻孔费用为123456.78美元)。

对于索引,我会认为分离它们会很好但是我担心从旧的RBDMS时代这个想法是不好的做法。

在某种程度上,它就像博客的例子。 我不确定我是否应该拥有1个[帐户]集合并在那里保留所有信息,或者有一个中间步骤将其拆分为单独的集合。

另一个相关的问题是,当你来回持续时,你通常会收回与该记录相关的所有内容 – 即使不是必需的,还是你限制?

这取决于。

这取决于您期望拥有的这些类型对象中的每一个。 您可以将它们全部放入给定用户的单个MongoDB文档中吗? 可能不是。

这取决于关系 – 用户帐户是一对多关系还是多对多关系? 如果它是一对多且帐户数量很少,您可以选择将它们放在用户文档的IList中。

您仍然可以使用单独的集合在MongoDB中建模关系但是数据库中没有连接,因此您必须在代码中执行此操作。 从性能角度来看,加载用户然后加载他们的帐户可能会很好。

您可以在文档上索引INTO数组。 不要将Index视为文档上简单字段的索引(如SQL)。 例如,您可以在文档上使用标记集合并将索引编入索引。 (参见http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays )

检索或写入数据时,可以对任何文档进行部分读取和部分写入。 (参见http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields )

最后,当您无法使用集合和索引查看如何获得所需内容时,您可以使用map reduce实现它。 例如,要查找当前正在使用的所有标签按其使用频率排序,您将映射发出其中使用的标签的每个文档,然后您将减少该集合以获得所需的结果。 然后,您可以永久存储该地图的结果,并在需要时仅将其更新。

还有一个问题:你提到按标签计算总数。 如果您想要会计质量的事务一致性,MongoDB可能不是您的正确选择。 “最终一致性”是NoSQL数据存储的游戏名称,它们通常不适合金融交易。 例如,如果一个用户看到带有3个评论的博客post而另一个用户看到4个因为他们点击了不同步的不同副本副本并不重要,但对于财务报告来说,这种一致性确实很重要 – 您的报告可能不会加起来!