2014-02-26 27 views
0

我試圖讓我的頭繞着我的數據庫結構偉大的模式設計的概念。我應該嵌入嵌套文件還是應該使用參考?mongoose.js:構建偉大的模式|嵌套與參考

我有這樣的結構:

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

我將與他們的章節和條款多本書籍。所以,我有2個問題:

  1. 怎麼會有我的貓鼬架構的樣子(1個架構VS多 模式的/嵌入VS參考)
  2. 我將如何查詢例如從BOOKTITLE所有chapterTitles X

Thx對你有幫助,我想我幾乎已經準備好了,當我理解了這些基本概念之後,我就可以自己去了。

回答

0

如果這是在你的數據庫中的模式,那麼你可以使用一個貓鼬的模式是這樣的:

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]'}

0

沒有開發誰不贊成分裂MongoDB中單個文件:)不幸的是,這只是漂亮在理論思想上。實際上,從MongoDB和貓鼬都不支持這個。

當然有支持引用,但相信我在這個方向上的每一個方法都會受到很多時間的懲罰,只是因爲太多的負面影響(人口,額外的儲蓄,...)相比之下,如果我們保存東西額外。

這是我迄今的經驗。除了要在mongodb-native之上編寫自己的圖層,您將會嘗試使用引用來處理很多痛苦。