【问题标题】:MongoDB - lookup/taxonomiesMongoDB - 查找/分类
【发布时间】:2017-10-26 00:23:52
【问题描述】:

在我的 MongoDB 数据库中,我有许多需要查找/分类信息的文档类型。通常,我要么持有查找的 Id,要么持有 Id 并将查找信息非规范化到主文档中。

例如

task = { 
   TaskDetail : "Some task",
   TaskPriority : { Id : xxxxx, Code : 'U', Description:'Urgent' }
}

从只有TaskPriority 表的传统关系数据库 (RDBMS) 转移,我想知道在 mongo 中使用文档的最佳做法是什么?

我最初的想法是有一个分类/查找集合。通常,查找和枚举都很短,所以每个都可以是集合中的单独文档?或者我可以镜像您通常在 RDBMS 数据库中执行的操作并创建一个集合以进行查找?

谁能指出我正确的方向?

提前致谢,

山姆

【问题讨论】:

  • 我很想有一个单独的集合来存储你所有的任务优先级。这将包含 id、代码和描述。在您的任务文档中,我只有 id。虽然这听起来很像 RDBMS 路由,但它确实避免了复制通常(有根据的猜测)是静态数据的内容,因此在每个文档中存储的价值很小。

标签: mongodb


【解决方案1】:

引用具有以下优点:

  1. 更好地管理主数据
  2. 重复数据删除,因此更新较少。

缺点:

  1. 查找是一个单独的 API 调用,在 MongoDB 中没有连接
  2. $lookup 函数的$DBRef 仍然可以使用,但是比较麻烦。手动参考更容易。
  3. 文档级别的原子性,因此如果更新参考查找集合,集合中的查找可能会在一段时间内不同步。

嵌入 - 另一方面,嵌入对于参考数据没有意义,因为如果查找值更新,您需要更新所有文档。跟踪所有需要参考数据更新的文档及其密钥是一项巨大的工作。

二次嵌入参考数据,也无法实现SCD(slowly changed dimension)历史保持能力。如果改为使用引用,您可以通过引用集合中的版本日期来实现此目的。

考虑到这些点,我倾向于参考。但我唯一的疑问是,如果我的父文档中没有引用值,搜索将如何工作?当用户使用描述性引用值进行搜索时,mongo 将如何引用引用数据集合?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 2018-09-05
    • 2013-01-01
    • 1970-01-01
    • 2021-07-19
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多