mongoDB + mongoose:为分层数据select正确的模式

我是mongoDB的新手,在一个节点项目中我使用mongoose为我的数据库创build一个模式。 我已经明白,在我的情况下,我应该使用embedded的数据,而不是通过引用。 ( http://docs.mongodb.org/manual/core/data-modeling-introduction/ )

我需要在数据库中存储的结构是这样的:

  • | 标题
  • | | 章节
  • | | | 内容(url到一个html文件)

来自mySQL世界,我想了解noSQL数据库的概念,我想知道如何devisemongoose模式。

谢谢,

您可以在MongoDB文档中嵌套文档和文档数组:

db.books.findOne(); 

可以返回一个JSON:

 { isbn:"253GHST78F6", title:"some book", author:"Earnest Hemmingway", chapters:[ {title:"chapter 1",content:"http://api.com/chapters/1.html"}, {title:"chapter 2",content:"http://api.com/chapters/2.html"} ] } 

但是,在MongoDB中对集合进行build模时还有一些事情需要记住:

  1. 模型数据尽可能接近要求:MongoDB中没有联接 ,因此,尽量保留所有这些数据在一起(预join) ,这是假设将来一起查询。

  2. 嵌套是很好的查询,但嵌套更新和search是不好的:

    1. 索引和search内嵌文件,特别是数组,将是昂贵的。
    2. 避免在嵌套数组中放置任何数据,这是非常频繁的更新。
  3. MongoDB中没有Foriegn Keys 。 所以,如果你有不同集合下嵌套的同一个文档的多个副本,保持所有这些更新是你的责任。

首先看看这个Martin Fowlers出色的video :

我认为没有更好的权威,可以解释nosql,然后福勒。 特别是知道他的SQL背景。

其次,MongoDB遵循json模式。 如果您知道如何使用json,您将会知道如何使用nosql(mongodb)。 基本的东西需要了解的是,Mongo架构是用一种正在使用它的语言来expression的。 所以,如果你在Mongo中使用NodeJS,你仍然有对象和数组的工作。 简而言之,Mongo并不强制任何特定的模式。 开发人员根据他的语言/孟加拉驱动程序创build他的scheme。

那么你如何用你的语言来expression你的数据逻辑呢? 如果它是以JS对象的forms,那么将该表单移动到db。

我真的很喜欢MongoDB,因为它可以结合一些伟大的JS工具,如Underscore.js进行各种数据操作。