2017-05-05 172 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非常好的解决方案,实际上我正在寻找一个非常干净和简单的解决方案。谢谢 !!!。如果您发现此问题有用/有趣,请将其标记为或最爱。 –

相关问题