跟踪父母的孩子,或跟踪孩子的父母?

时间:2013-08-23 17:59:17

标签: node.js mongodb mongoose

所以,假设我正在创建一个包含部分的列表。

是否最好在父元素中保留Array ObjectId个。

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

或者我只是在每个项目中保留对父级ObjectId的引用,只需查找

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

(或两者都是为了获得最大的灵活性?)

我一直在做第二种方式,但我想我可能会陷入关系数据库范式。因为一旦存在多个级别的嵌套,所有回调似乎都变得非常脏以获取我想要的数据。我并没有真正利用填充函数。

1 个答案:

答案 0 :(得分:1)

假设每个对象只有1个父对象,那么将父ID保存在子对象中要容易得多。

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

我不确定您使用的语言是否有可用的地图,但您可以使用地图将父ID与儿童ID相关联。它的工作原理是存储父ID作为键,子ID作为值。这样,您所要做的就是查找父ID并获取其所有值,或者查找子ID并获取其父ID。

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

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