我是MongoDB和MongooseJS的新手。抱歉,我也很擅长创建数据库。
第一个问题
子博士和人口之间有什么区别? 查看docs example,Parent-Children子目录似乎非常类似于Person-Stories人口。
数据库架构问题
场景:用户可以创建一些Canvas。每个Canvas都可以托管多个Shapes。每个Shape可以有两种类型:简单或复杂。简单形状可以是方形或圆形(对象)。复杂形状由框架和材料制成。
Canvas
|
Shape
/ \
Simple Complex: Frame, Material
/ \
Square Circle
现在,Shape只能分配给1 Canvas,但可以在Canvases之间移动,也可以在Canvas外单独使用。框架和材质可以独立创建(独立生活)并添加到复杂形状(每个复杂形状只能有1个框架和1个材质)。
我必须实现的一些查询是要求特定Canvas中的所有形状,或者使用某种材质的所有形状,或者是形状所使用的所有框架。
由于子博客和人口之间的区别对我来说并不清楚,我甚至不确定如何开始......任何帮助或示例都会受到赞赏(我不期待完整且有效的数据库架构)。 / p>
答案 0 :(得分:1)
在回答第一部分时,区别在于在Document-Subdocument场景中,子文档与文档一起存储(作为子文档,可通过使用点表示法访问)。
在Mongoose填充场景中,对另一个集合中的文档进行引用。当你告诉mongoose填充它的作用时,再向MongoDB发出一个查询来获取这个'子文档'。
我看到的主要区别是,使用mongoose populate方法,您无法使用'subdocument'属性查询文档,而您可以使用嵌入式子文档模型。
编辑,子文档示例
因此,在MongoDB中,您可以将数据存储为嵌套的子文档,如下所示:
{
_id: acbdbd,
"property": "value",
"subdocumentproperty" : {
"param1": 1,
"param2": 2
}
}
此数据仅与主文档一起存储,您的查询将通过主文档完成,例如
db.collection.find({"subdocumentproperty.param1": 1})