【问题标题】:mongoose.js: on building great schema's | nested vs referencemongoose.js:关于构建伟大的架构嵌套与参考
【发布时间】:2014-03-29 07:38:30
【问题描述】:

我正在努力理解为我的数据库结构设计出色架构的概念。我应该嵌入嵌套文档还是应该使用参考?

我有这个结构:

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

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

  1. 我的猫鼬模式会是什么样子(1 个模式与多个 架构的/嵌入与参考)
  2. 我将如何查询例如 bookTitle x 中的所有章节标题

谢谢你的帮助,我想当我理解了这些基本概念后,我几乎可以自己动手了。

【问题讨论】:

    标签: node.js mongodb mongoose schema


    【解决方案1】:

    如果这是您数据库中的架构,那么您可以使用这样的 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]'}

    【讨论】:

      【解决方案2】:

      没有开发人员不喜欢在 mongodb 中拆分单个文档 :) 不幸的是,这只是理论上的想法。实际上,无论是 mongodb 还是 mongoose 都没有对此的支持。

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

      这是我目前的经验。除非您想在 mongodb-native 之上编写自己的层,否则尝试使用引用会很痛苦。

      【讨论】:

        猜你喜欢
        • 2013-03-03
        • 2015-01-13
        • 2012-05-22
        • 1970-01-01
        • 2016-03-31
        • 2013-04-26
        • 2012-05-24
        • 2011-07-18
        • 1970-01-01
        相关资源
        最近更新 更多