【问题标题】:MongoDb and C# : Embedded or Reference Document [duplicate]MongoDb 和 C#:嵌入式或参考文档 [重复]
【发布时间】: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 的不良影响?

标签: c# mongodb


【解决方案1】:

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

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

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2015-07-06
  • 2013-03-03
相关资源
最近更新 更多