在mongodb集合中为嵌入式文档抽象出单独的api路由是不好的做法吗?

时间:2016-06-27 08:31:11

标签: node.js mongodb rest mongoose restful-architecture

我正在使用node.js,express和mongodb与mongoose构建一个ReSTful api。关于mongodb,我有两个关于ReSTful最佳实践的问题:

  1. 我有2个收藏:章节和页面。 Chapters集合包含嵌入的节文档数组。 (简化)模式如下:
  2. var sectionSchema = new Schema({
      name: { type: String },
      pages: { type: [Schema.Types.ObjectId], ref: 'Page' }
    });
    
    var chapterSchema = new Schema({
      name: { type: String },
      sections: [sectionSchema]
    });
    

    现在每个部分的内容都无关紧要。我的问题是,在我的场景中创建一个控制器或一组路由来获取/更新单个section元素是否合理。我的直觉是,我会破坏某种Restful api最佳实践,
    but perhaps not。在我的案例中,数据访问经常需要从章节集合中的sections数组中获取和更新单个section元素。

    1. 继我的第一个问题之后,如上所述,我有一个'页面'采集。如果我为部分构建路径,我想使用mongooses伪连接(或者mongos $ lookup)来返回单个section元素,其中页面引用了其pages数组。考虑到我访问多个集合,它会不会让我的api更少ReSTful。作为参考,页面模式如下:
    2. var pageSchema = new Schema({
        chapterId: { type: Schema.Types.ObjectId },
        name: { type: String },
        text: { type: String }
      }); 
      

      我可以通过两个控制器(章节和页面)完成所有这些并且没有连接,只需从客户端多次调用获取引用的资源,但这需要更多的api消费者,更多的请求超过电线和可能更多的数据库命中。

      如果您想知道为什么我在每个页面文档中都有一个chapterId,因为一个页面属于一个章节,并且在将其推送到某个部分的页面之前被取消分配。它也是一种快速简便的方法,可以让所有页面都属于一个章节而无需查询2个集合。随意评论我的设计的这个方面。页面也需要自己的集合,因为1.个别页面经常被访问,2页面可能会变得相当庞大和繁琐。

      大多数情况下,我使用这个项目作为node.js / mongodb世界和Web编程的一般介绍。提前谢谢!

0 个答案:

没有答案