gpt4 book ai didi

c# - 对象的 MongoDB 关系

转载 作者:太空狗 更新时间:2023-10-29 18:25:53 25 4
gpt4 key购买 nike

请原谅我的英语,我还在努力掌握它。

我已经开始学习 MongoDB(来自 C# 背景)并且我喜欢 MongoDB 的概念。我对 Internet 上的示例有一些疑问。

以流行的博客文章/评论为例。帖子没有或有很多与之关联的评论。我创建了 Post 对象,将一些 Comment 对象添加到 Post 中的 IList。没关系。

我是将它添加到 MonoDB 中的一个“帖子”集合中,还是应该有两个集合——一个是 blog.posts 和 blog.posts.comments?

我有一个相当复杂的对象模型,最简单的方法就是把它想象成一个银行系统——我们的是挖矿。我试图用方括号突出显示表格。

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

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

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

另一个相关的问题是,当你来回坚持时,你通常会取回与该记录关联的一切 - 即使不需要或者你是否限制?

最佳答案

这取决于。

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

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

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

您可以在文档上索引 INTO 数组。不要认为索引只是文档(如 SQL)中一个简单字段的索引。例如,您可以在文档上使用 Tag 集合并为标签建立索引。 (参见 http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays)

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

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

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

关于c# - 对象的 MongoDB 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com