2011-12-09 67 views
1

我正在用mongodb作爲db在Node.js中創建一個博客系統。Node.js - Mongoose/MongoDB - 模型模式

我有這樣的內容:(博客文章):

// COMMENTS SCHEMA: 
// --------------------------------------- 
var Comments = new Schema({ 

    author: { 
     type: String 
    }, 
    content: { 
     type: String 
    }, 
    date_entered: { 
     type: Date, 
     default: Date.now 
    } 

}); 
exports.Comments = mongoose.model('Comments',Comments); 
var Tags = new Schema({ 
    name: { 
     type: String 
    } 
}); 
exports.Tags = mongoose.model('Tags',Tags); 


// CONTENT SCHEMA: 
// --------------------------------------- 
exports.Contents = mongoose.model('Contents', new Schema({ 

    title: { 
     type: String 
    }, 
    author: { 
     type: String 
    }, 
    permalink: { 
     type: String, 
     unique: true, 
     sparse: true 
    }, 
    catagory: { 
     type: String, 
     default: '' 
    }, 
    content: { 
     type: String 
    }, 
    date_entered: { 
     type: Date, 
     default: Date.now 
    }, 
    status: { 
     type: Number 
    }, 
    comments: [Comments], 
    tags: [Tags] 

})); 

我有點新的這種類型的數據庫,即時通訊使用MySQL的一個LAMP堆棧。

基本上我的問題如下:

  • 什麼的內容筆者聯想到在 DB用戶的最佳方法是什麼?
  • 此外,什麼是做標籤和類別的最佳方式?

在MYSQL中,我們有一個標籤表和一個類別表,並通過鍵相關,我不確定在Mongo中做到最好和最優化的方式。

謝謝您的時間!

回答

2

爲蒙戈夫婦的想法:

  • 用戶相關聯的最佳方式是電子郵件地址 - 作爲內容/評論文檔的屬性 - 電子郵件通常是一個可靠的唯一鍵。 MongoDB沒有外鍵或相關約束。但那很好。
  • 如果您有註冊策略,請將用戶名,電子郵件地址和其他詳細信息添加到用戶集合中。然後用用戶名和電子郵件取消內容文檔的標準化。如果由於某種原因用戶更改了名稱,則必須更新所有相關的內容/評論。但只要電子郵件地址在文件中,這應該很容易。
  • 標籤和類別最好建模爲內容文檔中的兩個列表,即恕我直言。
  • 如果需要,您還可以在這些屬性上創建兩個索引。取決於您要提供的訪問模式和UI功能
  • 您還可以添加一個文檔,該文檔在內容集合中保留標籤列表和類別列表,並使用$ addToSet向該文檔添加新標籤和類別。然後,您可以顯示一個以當前標籤爲起點的組合框。
  • 作爲最後一點,想通過計劃訪問的數據,然後設計文件的方式,集合&指數相應
  • [更新11年12月9日]曾MongoSv和艾略特(10gen的CTO)提出了一個模式與此問題相關:每個用戶(可能會變大)的評論文檔每天都會有一條評論文檔,以便與_id = -YYYYMMDD一起使用,或者根據評論的頻率每月使用一個評論文檔。這優化了索引創建/文檔增長與文檔擴展(在每個用戶有一條評論的情況下)。
0
  1. 到內容作者相關聯,以在所述的MongoDB用戶的最好方法,是採取在作者集合排列的保持到用戶的參考。基本陣列,因爲一個內容/書可能有多個作者,即您需要將一個內容關聯到多個用戶。

  2. 類別的最佳途徑是在數​​據庫中創建不同的集合,並與上面類似地在內容中保存數組。

我希望它至少有一點幫助。