MongoDB中的稀疏索引不起作用?

时间:2013-06-01 23:11:37

标签: mongodb indexing database nosql

我正在尝试理解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({})

作品!出了什么问题?

2 个答案:

答案 0 :(得分:3)

稀疏唯一索引意味着文档不需要具有索引字段,但是当它具有该字段时,它必须是唯一的。

当字段不存在时,您可以将任意数量的文档添加到集合中。请注意,当您插入空文档时,_id字段将获得一个自动生成的ObjectID,该ObjectID是(保证的)唯一。

答案 1 :(得分:1)

这几乎是sparse的含义。来自the docs;

  

稀疏索引仅包含具有索引字段的文档的条目。 [5] 任何缺少该字段的文档都没有编入索引。

换句话说,您缺少的id字段使索引甚至不考虑该条目进行唯一检查。