2013-08-23 59 views
0

所以我们假设我正在创建一个带有部分的列表。跟踪父母的孩子,或跟踪孩子的父母?

是否最好将ArrayObjectId保留在父元素中。

var listSchema = new mongoose.Schema({ 
    sections : {type: [ObjectId], ref : "Section"} 
}); 

还是我只是不停地给母公司ObjectId中的每一项参考,并简单地找到

var sectionSchema = new mongoose.Schema({ 
    list : {type: ObjectId, ref : "List"} 
}); 

(或两者最大的灵活性?)

我一直在做第二方式,但我想我可能会陷入关系数据库范例。因为一旦有多层次的嵌套,它就会变得非常脏,所有的回调都会得到我想要的数据。我真的不能利用填充函数。

+0

这个基本问题已经在StackOverflow和其他地方都被覆盖了很多。 10gen已经记录了各种选项的优点和缺点,这已经很常见了:http://docs.mongodb.org/manual/tutorial/model-tree-structures/ – WiredPrairie

+0

http://stackoverflow.com/search?q=tree +结构+ mongodb – WiredPrairie

+0

谢谢,我来看看。 –

回答

1

假设每个对象只有一个父对象,那么在父对象中保留父对象更容易。

尽管如果您总是试图找到对象的子对象而不是父对象,那么在父对象中存储一组子对象会更容易。

我不确定您正在使用的语言是否可以使用地图,但是您可以使用地图将父ID与儿童ID链接。它通过存储父ID作为关键字,并将子ID作为值进行工作。这样,您只需查找父ID并获取其所有值,或查找子ID并获取其父母即可。

这意味着ID不会存储在子项或父项中,而是存储在他们都需要访问的单独数据结构中。

此外,常规地图可能只允许每个键一个值。如果是这种情况,你需要一个MultiMap。在互联网上可能有一些关于如何使用它以及如何访问课程的信息。

+0

我不确定为什么你在评论你甚至不知道这项技术? – WiredPrairie