mongodb sparse &unique

本文探讨了在使用Mongoose操作MongoDB时遇到的null值唯一性问题,即设置字段为unique时,多个文档若该字段值为null会引发E11000错误。通过引入sparse属性解决了这一问题,并分享了解决方案。

最近在使用mongoose插入文档的时候遇到了一个错误,

     错误大致如下:MongoError: E11000 duplicats key error index: xxx$user_1 dup key: { : null}

意思很明显,插入的key对应的value值已经存在,但是疑惑的地方就在于,这个值是null,null为什么会重复?

原因就在于user这个key使用了unique的属性,for example:

let schema = new Schema({
	user: { type: String, unique: true }
});

当创建文档的时候如果不添加user这个key,就会被赋一个默认值null,而这个null只能存在一个,再次创建一个user为null的时候就会报上面的错误。

难道没有解决办法了吗?不,聪明的mongodb考虑到了,于是提供了sparse属性,这两个搭配使用就可以解决这个问题。

mongodb sparse

官方文档:An index that is both sparse and unique prevents collection from having documents with duplicate values for a field but allows multiple documents that omit the key.

于是这样使用:

let schema = new Schema({
	user: { type: String, unique: true, sparse: true }
});

如果key不是必须唯一的建议不使用unique属性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值