mongodb唯一索引null的问题总结

 0 0条评论

项目需求:

用户表中有mobile手机字段,允许空,但是如果填写了就不能重复。

    mobile: {
        type: String,
        unique: true,
        dropDups: true,
        default:null
    }

一开始我是这样定义的,但是插入第二条null时,就会报错11000错误。

那么我们把default:null去掉行不行?亲自实验过也不行,仍然会抱11000错误,数据重复,也就是说确定了唯一约束后,必须这个字段有值,且不能重复。

网上查了很多文章,了解到关键词sparse: true,解释基本都是复制的,听到最多的话就是:

稀疏索引仅包含具有索引字段的文档的条目,即使索引字段包含空值也是如此。索引会跳过缺少索引字段的任何文档。配合唯一索引使用,即可实现对存在的字段才使用唯一索引。

这样一段话,说的云里雾里的,谁能明白?

经过我多次postman实现,不断删除表格新建表格,得出的结论是

    mobile: {
        type: String,
        unique: true,
        dropDups: true,
        sparse: true
    }

必须把default:null去掉,再插入数据的时候,不要写入mobile字段,也就是说集合中不存在mobile字段,那么这样就可以重复添加了,当然一旦有mobile字段,就必须是唯一了。

当然其实这样解决方案还是不如关系型数据,当然没有mobile的集合检索出来时,那就没有这个字段了,感觉有点奇怪!


本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客