所以,假设我正在创建一个包含部分的列表。
是否最好在父元素中保留Array
ObjectId
个。
var listSchema = new mongoose.Schema({
sections : {type: [ObjectId], ref : "Section"}
});
或者我只是在每个项目中保留对父级ObjectId
的引用,只需查找
var sectionSchema = new mongoose.Schema({
list : {type: ObjectId, ref : "List"}
});
(或两者都是为了获得最大的灵活性?)
我一直在做第二种方式,但我想我可能会陷入关系数据库范式。因为一旦存在多个级别的嵌套,所有回调似乎都变得非常脏以获取我想要的数据。我并没有真正利用填充函数。
答案 0 :(得分:1)
假设每个对象只有1个父对象,那么将父ID保存在子对象中要容易得多。
尽管如果你总是试图找到一个对象的子节点而不是父节点,那么在父对象中存储一个子节点ID数组会更容易。
我不确定您使用的语言是否有可用的地图,但您可以使用地图将父ID与儿童ID相关联。它的工作原理是存储父ID作为键,子ID作为值。这样,您所要做的就是查找父ID并获取其所有值,或者查找子ID并获取其父ID。
这意味着ID不会存储在子级或父级中,而是存储在他们都需要访问的单独数据结构中。
此外,常规Map可能只允许每个键一个值。如果是这种情况,则需要MultiMap。在互联网上可能有一些关于如何使用它以及如何访问该类的信息。