Mongodb 稀疏唯一索引

1.  唯一索引(Unique):  
           即索引字段的值是唯一的,全局无重复;如果尝试存入重复的值(write),操作将会被拒绝。可以通过db..createIndex({ "userid" : 1}, {unique : true})创建唯一索引。我们可以对一个组合索引使用unique属性,表示它们的组合值不能重复,默认情况下unique为false。如果插入的document不包含某个索引字段,那么此字段的值保存为null,mongodb也会用unique约束这样的文档,即不包含某个字段的文档只能保存一条。比如唯一索引{"x" : 1, "y" : 1},只能插入一条{"x" : "content"}(等同于{"x" : "content","y" : null})。对于hash索引而言,则不能使用unique属性。
2.  稀疏索引(Sparse):  
           只有当document中包含索引字段时,才会为此文档建立索引,但是这些文档仍然能够保存成功·;因为mongodb的document结构是模式自由的,所以document中不包含某个Field也是“正常的”;稀疏索引将会忽略那些document中不包含索引字段的记录,因此稀疏索引并没有包含collection中的所有文档;非sparse索引,将会为那些缺失的字段存储为null,因此索引包含了全部文档。  
           当sparse与unique同时约束索引时,比如createIndex({"score" : 1}, {sparse : true, unique: true}),如果文档中不包含score字段,那么文档都可以保存成功,但是不会对这些文档建立索引,但是对于包含了score字段的文档,那么score值则不能重复。如果是组合索引,比如createIndex({useid : 1, score : 1},{sparse : true, unique: true}),对于缺失score的文档,只要useid不同均可以建立索引且保存成功,如果useid和score都缺失,文档可以保存但是不会建立索引。

主要是想利用数据库的唯一约束,但是字段有可能没有值的场景

你可能感兴趣的:(mongodb,索引)