0

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

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

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

还是我只是ObjectId在每个项目中保留对父母的引用,然后简单地找到

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

(或两者兼而有之以获得最大的灵活性?)

我一直在做第二种方式,但我想我可能过于拘泥于关系数据库范式。因为一旦有多层嵌套,所有的回调似乎都会变得很脏,以获得我想要的数据。而且我并没有真正利用填充功能。

4

1 回答 1

1

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

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

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

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

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

于 2013-08-23T18:19:24.897 回答