2

我是 MongoDB 和 MongooseJS 的新手。我也很不擅长创建数据库,对不起。

第一个问题

子文档和人口有什么区别?查看文档示例,Parent-Children subdoc 似乎与 Person-Stories 人口非常相似。

数据库架构问题

场景:用户可以创建多个 Canvas。每个 Canvas 可以承载多个形状。每个形状可以是 2 种类型:简单或复杂。简单形状可以是方形或圆形(对象)。复杂形状由 Frame 和 Material 组成。

            Canvas
               |
             Shape
            /     \       
      Simple       Complex: Frame, Material 
      /     \
Square       Circle

现在,一个 Shape 只能分配给 1 个 Canvas,但可以在 Canvas 之间移动或单独居住在 Canvas 之外。框架和材质可以独立创建(单独存在)并添加到复杂形状(每个复杂形状只能有 1 个框架和 1 个材质)。

我必须实现的一些查询是询问特定 Canvas 中的所有形状,或者使用某种材料的所有形状,或者再次询问形状使用的所有框架。

由于我不清楚 sub-doc 和 population 之间的区别,我什至不知道如何开始......任何帮助或示例将不胜感激(我不期待完整且有效的数据库模式)。

4

1 回答 1

1

在回答第一部分时,不同之处在于在 Document-Subdocument 场景中,子文档与文档一起存储(作为子文档,可通过使用点符号访问)。

在 Mongoose 填充场景中,引用保存在另一个集合中的文档。当您告诉 mongoose 填充它所做的事情时,对 MongoDB 进行另一个查询以获取此“子文档”。

我看到的主要区别是,使用 mongoose populate 方法,您无法使用“子文档”属性查询文档,而您可以使用嵌入式子文档模型。


编辑、子文档示例

因此,在 MongoDB 中,您可以将数据存储为嵌套的子文档,如下所示:

{
    _id: acbdbd,
    "property": "value",
    "subdocumentproperty" : {
        "param1": 1,
        "param2": 2
    }
}

此数据仅与主文档一起存储,您的查询将通过主文档完成,例如

db.collection.find({"subdocumentproperty.param1": 1})
于 2013-08-12T09:32:07.817 回答