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

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

{
    "ns" : "mydb.users",
    "key" : {
        "fbId" : 1
    },
    "name" : "fbId_1",
    "unique" : true,
    "sparse" : true,
    "background" : false,
    "v" : 0
}

我本以为这会允许我插入以null作为fbId的记录,但这会引发重复密钥异常.它只允许我在fbId属性被完全删除时插入.

稀疏索引不应该解决这个问题吗?

推荐答案

稀疏索引不包含缺少索引字段的文档.但是,如果字段存在且值为null,它仍将被索引.因此,如果应用程序中缺少字段及其等于null的值看起来是一样的,并且您希望保持fbId的唯一性,那么在获得值之前不要插入它.

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

Mongodb相关问答推荐

使用单个/多个值查询任何/特定,而不使用if块

防止查找简单字段

如何在Mongo中查找数组中的特定对象

获取响应周期中的特定键和值

Mongo聚合的具体格式

MongoDB 使用 pymongo 收集 500K 文档的写入速度很差

通过insertId MongoDB获取文档

有没有一种方法可以找到一个文档并通过 Go 更改 mongodb 中的 id/value 来克隆它

在MongoDb的数组中计算大于某个数字的数字

无法让 Mongoose.js 子文档数组填充

在mongoose中添加多个验证

MongoDB:设置 Windows 服务

mongodb - 查找具有最接近整数值的文档

在 MongoDB 中合并两个集合

使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

填充mongoose后查找

如何在 NoSql 数据库(MongoDB)中强制执行外键?

在mongoose中查询虚拟属性

如何使用 mongoose 连接到 mongoDB Atlas

即使重新安装后,Mongo 仍在等待 27017