MongoDB 手册参考与 DBREF

Dar*_*ius 6 mysql mongodb relational-theory

我一直在研究 MongoDB 并试图查看它是否适合我公司的产品目录。

我遇到了数据库引用:http : //docs.mongodb.org/manual/reference/database-references/并有一些关于如何将文档链接在一起的问题。

假设我们有两个db.categoriesdb.products集合...我有文档db.products需要链接到db.categories.

我有一个“类别”字段db.products,我将在其中存储类别文档的 objectID。但是,我没有看到指定此 objectID 引用db.categories集合的方法。我需要使用 DBREF 吗?

以下是我的数据的简要示例...

文档db.categories

 {
        "_id" : ObjectId("546b72a47ea1d03593000158"),
        "name" : "Category1",
        "type" : "type1 of category1",
        "spec_columns" : [ 
            {
                "field" : "capacity",
                "display" : "Capacity (tons)"
            }, 
            {
                "field" : "weight",
                "display" : "Weight (lbs)"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

文档db.products

{
    "_id" : ObjectId("546a575f7ea1d03593000154"),
    "model" : "NER003H",
    "category" : ObjectId("546b72a47ea1d03593000158"),
    "capacity" : "1/2",
    "weight" : 10
}
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助、建议和意见,并非常感谢。

大流士

Ada*_*m C 12

简短版本:使用手册参考,而不是DBRef.

解释:

使用 Beyond 没有特别的好处,可以DBRef为您提供引用文档所在的集合和数据库。如果您知道引用仅在类别和产品之间,那么这不是特别有用。ADBRef只包含_id引用文档的名称、集合名称和可选的数据库名称。您通常会在您的应用程序中拥有所有这些信息(即您拥有 _id 并且您知道它已经驻留在 db/collection 中)。

如果不是这样的话,让我们说你的数据库和集合摆不得不文件的引用,这是困难或麻烦的应用端来跟踪其中之一的每个文档居住在,那么它可能是一个利益来使用DBRefs。毕竟,在这种情况下进行手动引用的最简单方法是将您正在引用的数据库和集合也存储在文档中,无论如何这DBRefs都是您要做的。

这(从单个源集合引用多个集合)并不是一种非常常见的模式,也不是您上面概述的模式,因此除非您有如此令人信服的理由使用它们,否则建议改为手动引用。

一些驱动程序具有辅助方法,与手动参考相比,这些方法可能会节省几行代码,但并非所有驱动程序都这样做,并且可能会使代码更难理解(没有一些很好的注释/文档来解释它)。除此之外,DBREF 方法比手动实现更固定 - 如果您想引用一个字段而不是_id例如。

最后,在产品目录设计方面,我强烈建议阅读Antoine Girbal 的这两篇优秀而详细的博客文章:

在 MongoDB World 2014 上也有关于这个主题的三个演讲,所以我建议在你进步时也回顾一下: