我正在制作一个MEAN堆栈应用程序并将Mongoose与Mongo一起使用。我正在努力在数据库中组织我的对象。一切都按预期工作,但我觉得我做事的方式是错的,但似乎找不到任何可以帮助我的主题资源,因此我希望有经验的人可以与我分享。< / p>
我使用Mongoose创建了几个模式,并且我遇到了一个与MongoDB中的嵌套对象有关的困境。 假设我有一个看起来像这样的模型:
ParentSchema:{
property1:String,
children:[{}]
}
因此,property1只是一些字符串,'children'是一个数组,它将包含具有一些其他属性的'Child'类型的对象,还有另一个数组(f.ex。'grandchildren:[{]}),这个时间与另一种类型的对象(孙子)。
Child和Grand没有架构,并且不存在于Parent之外,并且很可能对于Parent的每个实例都是唯一的,因此两个Parent不会共享Child对象。
在我的应用中,我可以使用'/ parent /:id1 / Child /:id2 / Grandchild /:id3'等网址,其中'id1'是Parent的实际ID Mongo生成,而'id2'是存储在Parents数组中的Child对象实例的索引。存储在Child对象中的孙子实例也是如此。
我在考虑可能为所有3个对象设置单独的模式,只是保存对象的引用是可行的方法,如下所示:
ParentSchema:{
prop1:String,
children:[{type:ObjectId, ref:'Child'}]
}
ChildSchema:{
prop1:String,
granchildren:[{type : ObjectId, ref: 'Grandchild'}]
}
GrandChildSchema:{
prop1:String,
prop2:String
}
..但不确定,对我而言,这意味着Child和GrandChild实例将在不同的父母之间共享,但似乎更容易使用。
总结一下,我想知道的是:
我如何创作呢?我希望这个过程看起来像这样:
Start creating Parent -> start creating first Child -> create some Grandchildren ->
finish creating Child -> start creating second Child -> ... -> finish creating Parent.
如果问题有点奇怪,我道歉,如果需要,我会尽力澄清。
答案 0 :(得分:1)
我会采用第二种方法,原因有两个:
请注意,以下答案主要基于意见。
对于API设计:
我认为,由于您已经声明Child
而Grandchild
没有父母的权利,我认为由您明确向消费者公开的路径取决于您 - 我认为你的路线很好。
最后 - 您创建这些实体的过程对我来说很好。我自己会做同样的事情。