2017-05-05 115 views
1

我讀過MongoDB的官方文檔,但實際上無法理解稀疏和部分索引之間的區別。希望通過實例進行解釋性觀點。提前致謝!!!!部分索引和稀疏索引mongodb有什麼區別?

+2

它在這裏解釋:[與稀疏指數比較](https://docs.mongodb.com/manual/core/index-partial/#comparison-with-the-sparse-index) – felix

回答

7

稀疏索引是優化的索引,它只包含指向索引字段中具有值的文檔的指針。 例如,你想在姓氏字段

{ _id: 1, firstname: 'John', lastname: 'Black', age: 20 } 
{ _id: 2, firstname: 'Stive', lastname: 'White', age: 17 } 
{ _id: 3, firstname: 'Tom', age: 22 } 

如果您運行

db.users.createIndex({ lastname: 1 }); 

命令,它會在3個文件添加索引添加索引,但是你並不需要對文檔索引沒有姓氏值(_id:3)。它浪費空間和記憶。 爲了避免空字段的索引,mongodb有sparse索引,它只是檢查非空值。 所以,當你添加sparse: true

db.users.createIndex({ lastname: 1, sparse: true }); 

的MongoDB只2個文件添加索引(_id:1,_id:2)。它很棒,但如果你只想索引那些超過18年的用戶文檔,該怎麼辦? 你不能使用稀疏索引,因爲它只檢查文檔是否存在值。

這就是爲什麼partial indexes被創建。

db.person.createIndex( 
    { age: 1}, 
    { partialFilterExpression: { age: { $gte: 18 }, lastname: { $exists: true }} 
); 

這個例子將索引僅用於1個文檔(id:1)。部分索引是稀疏的複雜版本,它將過濾文檔,不僅檢查它們的存在,還會使用partialFilterExpression字段中提供的條件。

+0

a非常好的解決方案,實際上我正在尋找一個非常乾淨和簡單的解決方案。謝謝 !!!。如果您發現此問題有用/有趣,請將其標記爲或最愛。 –

相關問題