MongoDb 和 C#:嵌入式或参考文档 [重复]

Posted

技术标签:

【中文标题】MongoDb 和 C#:嵌入式或参考文档 [重复]【英文标题】:MongoDb and C# : Embedded or Reference Document [duplicate] 【发布时间】:2018-01-26 16:30:01 【问题描述】:

MongoDb 中的文档引用是推荐的方法还是嵌入式文档是正确的方法?我的问题来自以下背景。

class ObjectType1

ObjectId ID;
ObjectType2 Type2Element;


class ObjectType2

ObjectId ID;

我知道我们可以使用 MongoDBRef 来引用第一类中的 ObjectType2 元素,但我无法找到 FetchDBRefAs 方法(我使用的是官方 mongodb C# 驱动程序,可能正在查看错误的位置/命名空间)。

如果需要在 MongoDb 中链接实体,推荐的方法是什么,尤其是使用 C#? 谢谢

【问题讨论】:

“我知道我们可以使用 MongoDBRef” 我不知道你在哪里看到的,但它一定是一个旧的来源或者一个非常不了解的来源。不要使用DBRef。如果要引用,请优先使用普通的 ObjectId 值或本地和外键的任何值,而是定义它们指向的模型“改为在您的应用程序逻辑中”。 DBRef 与您在没有正式弃用通知的情况下得到的一样接近弃用概念。它不受许多现代操作的支持,并且是查询的一般障碍。 “嵌入与参考”的选择实际上是基于意见的,唯一真正的解决方案完全基于您的实际应用程序使用模式和要求,不应以任何方式受到人们对该主题的意见的影响.为了更好地理解为什么使用“一个或另一个”,您应该阅读和理解现有的参考资料,例如MongoDB relationships: embed or reference? 或Mongoose populate vs object nesting。后者仍然与意图基本相关 谢谢@NeilLunn @NeilLunn 如果您不介意,请教我 DbRef 的不良影响? 【参考方案1】:

尽快回答您的问题:取决于您的用例。

我在设计自己的数据库架构时喜欢遵循的一些规则:

如果在您的代码中同时需要 ObjectType1 和 ObjectType2,那么我建议您使用嵌入式方法,因为您只需要 1 个查询即可对它们执行 CRUD。此外,它更合乎逻辑,因为您需要的所有信息都在 db 中的同一位置。

如果大多数时候在代码中您只需要 ObjectType2,那么我会将它们分成 2 个集合。

这部分官方文档有更多信息: https://docs.mongodb.com/manual/core/data-modeling-introduction/

【讨论】:

你推荐 MongoDBRef 还是在文档分开时使用 ObjectId ? 我在学习Mongo的时候来到了这个帖子。 ***.com/questions/9412341/mongodb-is-dbref-necessary。让我从不使用 DBRef,因为似乎很多人都说应该避免使用它。

以上是关于MongoDb 和 C#:嵌入式或参考文档 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 驱动程序以指定顺序从 MongoDB 获取文档 [重复]

使用 C# 驱动程序以指定顺序从 MongoDB 获取文档 [重复]

如何在 mongoDB 中存储地理空间信息

findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]

findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]

如何匹配 MongoDB 中嵌入式数组或文档中的字符串?