我正在尝试理解MongoDB中的稀疏索引。我明白,如果我这样做:
> db.check.ensureIndex({"id":1},{sparse:true, unique:true})
我只能插入id
字段不重复且不存在的文档。
因此,我试过了,
> db.check.insert({id:1})
> db.check.insert({id:1})
正如我所预料的那样:
E11000 duplicate key error index: test.check.$id_1 dup key: { : 1.0 }
但是,插入包含不存在的id
字段的文档:
> db.check.insert({})
作品!出了什么问题?
答案 0 :(得分:3)
稀疏唯一索引意味着文档不需要具有索引字段,但是当它具有该字段时,它必须是唯一的。
当字段不存在时,您可以将任意数量的文档添加到集合中。请注意,当您插入空文档时,_id字段将获得一个自动生成的ObjectID,该ObjectID是(保证的)唯一。
答案 1 :(得分:1)
这几乎是sparse
的含义。来自the docs;
稀疏索引仅包含具有索引字段的文档的条目。 [5] 任何缺少该字段的文档都没有编入索引。
换句话说,您缺少的id字段使索引甚至不考虑该条目进行唯一检查。