mongoose.js:建立伟大的架构|嵌套vs引用

时间:2014-02-26 12:52:42

标签: node.js mongodb mongoose schema

我正试图了解我的数据库结构的伟大架构设计的概念。我应该嵌入嵌套文档还是应该使用引用?

我有这个结构:

book
 | bookTitle
 | bookChapters
 | | chapterTitle
 | | chapterArticles
 | | | articleTitle
 | | | articleSubTitles
 | | | | title

我将有多本书及其章节和文章。所以我有两个问题:

  1. 我的mongoose架构将如何显示(1架构与多架构) schema / embed vs reference)
  2. 我如何从bookTitle x
  3. 查询所有chapterTitles

    谢谢你的帮助,我想当我理解这些基本概念时,我几乎已经准备好了。

2 个答案:

答案 0 :(得分:0)

如果这是数据库中的架构,那么您可以使用像这样的mongoose架构:

var articleSubTitleSchema = new Schema({title: 'string'});
var articleSchema = new Schema({title: 'string', articleSubTitles: [articleSubTitleSchema]});
var chapterSchema = new Schema({title: 'string', chapterArticles: [articleSchema]});
var bookSchema = new Schema({title: 'string', 'bookChapters': [chapterSchema]});

第二部分最好的选择是简单地获取整本书籍文档,并在应用程序代码中获取章节。

var book = ... query ...
var chapters = book.bookChapters;
var chapterTitles = _.pluck(chapters, 'title');

在这里,我使用http://underscorejs.org/来更轻松地抓住标题。

如果您要搜索包含特定章节的所有图书,可以编写如下查询:{'bookChapters.titles': '[title]'}

答案 1 :(得分:0)

没有开发人员不赞成在mongodb中拆分单个文档:)不幸的是,这在理论上很不错。实际上,mongodb和mongoose都没有这方面的支持。

当然有参考文献的支持,但相信我在这个方向上的每一种方法都会受到很多时间的惩罚,因为有太多的负面影响(人口,额外储蓄......)比较,如果我们节省额外的东西。

这是我迄今为止的经历。除非你想在mongodb-native之上编写一个自己的图层,否则尝试使用引用会有很多痛苦。