我已经阅读了MongoDB的官方文档,但实际上无法理解稀疏索引和部分索引之间的区别。希望得到一个带有例子的解释性视图。在此先感谢!!!!
答案 0 :(得分:19)
稀疏索引是一个优化索引,它只包含指向索引字段中具有值的文档的指针。 例如,假设您要在姓氏字段
上添加索引{ _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个文档上添加索引,但是您不需要在文档上有一个没有lastname值的索引(_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
字段中提供的条件。