2012-02-26 24 views
1

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

例如

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

从传统的关系型数据库(RDBMS),我只想有一个TaskPriority工作台移动,我想知道蒙戈内使用文档时,最好的做法是什么呢?

我最初的想法是有一个分类/查找集合。通常,查找和枚举很短,所以每个可以是集合中的单独文档?或者我可以反映你通常在RDBMS数据库中做什么,并创建一个集合来查找?

任何人都可以在正确的方向指向我吗?

由于提前,

山姆

+1

我很想拥有一个单独的集合来存储所有的任务优先级。这将包含ID,代码和说明。在你的任务文件中,我只是有这个ID。尽管这听起来很像RDBMS路线,但确实避免了通常(受过教育的猜测)是静态数据的重复,并因此在每个文档中提供的值很少。 – dubs 2012-02-26 14:54:16

回答

0

引用具有如优点:主数据

  • 重复数据删除,因此较小的更新

    1. 更好的管理。

    缺点:

    1. 查找是一个单独的API调用,没有MongoDB中
    2. 的$查找函数$ DBREF连接仍然可以使用,但繁琐。手动参考更容易。
    3. 文档级别的原子性,因此如果参考查找集合已更新,则某些时候集合中的查找可能会不同步。

    嵌入 - 另一方面,嵌入对引用数据没有意义,因为如果查找值得到更新,则需要更新所有文档。这是一项巨大的练习,可以跟踪需要参考数据更新的所有文档及其关键字。

    其次嵌入参考数据,也不能达到SCD(缓变尺寸)历史保存能力。如果使用引用,则可以使用引用集合中的版本日期来实现此目的。

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