MongoDB插入文档时主邮箱唯一性校验器表达式编写求助
MongoDB 主邮箱唯一性校验方案
文档级校验器仅能对当前插入/更新的文档做字段规则校验,无法实现跨文档的唯一性检查。正确实现主邮箱不重复的方案是使用唯一索引+部分过滤表达式,具体操作如下:
创建唯一索引
执行以下MongoShell命令为集合创建索引(假设集合名为users):
db.users.createIndex( { "emails.value": 1 }, { unique: true, partialFilterExpression: { "emails.primary": true } } )
索引作用说明
- 该索引仅针对数组
emails中primary字段为true的元素,对其value字段(邮箱地址)施加唯一约束 - 当插入或更新文档时,如果新的主邮箱(
primary: true的邮箱值)已经在集合中存在,MongoDB会抛出E11000重复键错误,直接阻止操作 - 非主邮箱(
primary: false)的邮箱值不受此唯一约束限制
验证示例
插入你提供的测试文档:
{ "username": "u3", "emails": [ { "type": "work", "value": "u2@email.com", "primary": true }, { "type": "work", "value": "u2_1@email.com", "primary": false } ] }
由于u2@email.com已经是u2文档的主邮箱,操作会触发重复键错误,被MongoDB阻止,完全符合需求。
内容的提问来源于stack exchange,提问作者TheVee
相关产品推荐
相关产品推荐

