mongo中的稀疏索引和空值

Mon*_*key 18 indexing mongodb mongodb-indexes

我不确定我是否正确理解稀疏索引.

我在fbId上有一个稀疏的唯一索引

{
    "ns" : "mydb.users",
    "key" : {
        "fbId" : 1
    },
    "name" : "fbId_1",
    "unique" : true,
    "sparse" : true,
    "background" : false,
    "v" : 0
}
Run Code Online (Sandbox Code Playgroud)

而且我期望这会允许我插入带有null的记录作为fbId,但是会抛出重复的键异常.它只允许我在完全删除fbId属性时插入.

是不是应该处理的稀疏指数?

Ser*_*sev 36

稀疏索引不包含错过索引字段的文档.但是,如果字段存在且值为null,则仍将编制索引.因此,如果缺少字段及其相等性以null使您的应用程序看起来相同并且您希望保持其唯一性fbId,则只要在有值之后不要插入它.

当您拥有大量文档时,您需要稀疏索引,但只有一小部分文档包含某些字段,并且您希望能够通过该字段快速查找文档.创建一个普通的索引太贵了,你只会浪费宝贵的RAM来索引你不感兴趣的文档.

  • 从 MongoDB 3.2 开始,MongoDB 提供了创建部分索引的选项。部分索引提供了稀疏索引功能的超集。https://docs.mongodb.com/manual/core/index-partial/ (2认同)