2016-04-24 39 views
0

我想在集合中添加獨特的文檔。然而問題是我想根據2個領域來決定獨特性。所以我在網上找到了一個解決方案。令我困惑的是,INDEX的目的是什麼?在RDBMS中,索引通常是用於行ID的詞,這在這裏意味着什麼,它是如何影響唯一性的?Mongoose Schema中索引的用途

var patientSchema = mongoose.Schema({ 
    name : String, 
    fatherOrHusbandName : String, 
    address : String, 
}); 


patientSchema .***index***({ email: 1, sweepstakes_id: 1 }, { unique: true }); 

回答

3

它實際上具有與RDBMS中的索引相同的目的。你只需要用一些mongo術語來思考。在mongodb而不是Tables中,您有集合,而不是行,您擁有文檔。 隨着貓鼬你定義爲一個集合「病人」的模式,這個集合內(指數屬於患者收集)您定義的文檔屬性的電子郵件和sweepstakes_id唯一索引。

每次保存文檔的患者集合中,MongoDB中可以確保它具有電子郵件和sweepstakes_id屬性設置文檔,這些2個屬性將所有其他文件中是唯一的。

因此,而不是「行」,認爲「文件」

+0

我還是不明白,指數的目的,在這裏...你能請詳細說明該指數想法獴? – user2498079

+0

好吧,更具體一點:索引是一個核心的mongodb功能,貓鼬只是幫助你在你的模式定義中很好地定義它(它不是mongodb核心,mongo沒有模式)。最後,它會在您的收藏集上創建索引,如下所述:https://docs.mongodb.org/manual/indexes/。你可以直接在mongo數據庫上創建一個索引來達到同樣的目的 – risuch

+0

你試圖實現的內容在這裏描述:https://docs.mongodb。org/manual/core/index-unique /,並且您創建的索引類型稱爲唯一化合物索引。因此,如果您比較直接在數據庫和貓鼬上執行操作的方式,則操作方式如何定義幾乎相同: mongodb:db。 .createIndex({email:1,sweepstakes_id:1},{unique: mongoose:patientSchema .index({email:1,sweepstakes_id:1},{unique:true});}} mongoose: 這有幫助嗎? – risuch

3

索引支持MongoDB中查詢的執行效率。如果沒有 索引,MongoDB中必須執行的集合掃描,即掃描每個 文檔集合中,選擇那些符合 查詢語句文件。如果查詢存在適當的索引,MongoDB 可以使用該索引來限制它必須檢查的文檔數量。

欲瞭解更多詳情,請參閱this documentation

閱讀本文檔後請勿混淆,因爲本文檔中使用createIndex且您的代碼在使用indexcreateIndexMongoDB的index貓鼬在內部執行MongoDB的操作。

如果你在你的數據庫中沒有數據

那麼它將做工精細

patientSchema .index({ email: 1, sweepstakes_id: 1 }, { unique: true }); 

,但如果你有重複的項目數據庫的一些數據,那麼你應該使用dropDups關鍵字來進行唯一索引。

但有一件事你使用dropDups前應該知道。如果你使用dropDups: true和你有重複值的一些數據,然後保存在一個文件中您的數據庫和其他所有數據將被刪除(重複數據)。

,如:

patientSchema .index({ email: 1, sweepstakes_id: 1 }, { unique: true, dropDups: true });