May*_*evy 6 indexing mongodb mongodb-query
我在MongoDB中有以下JSON模式:
{"email": "example@gmail.com", "second_email": "example222@gmil.com"}
Run Code Online (Sandbox Code Playgroud)
如何强制两个字段分别是唯一的,并且它们之间也是唯一的.
即以下文件无效:
{"email":"anotherone@gmail.com", "second_email":"example@gmail.com"}
Run Code Online (Sandbox Code Playgroud)
因为example@gmail.com已经存在于另一个领域的另一个文档中.
在我的头脑中,没有数据库可以做到这一点(使用另一个列/字段作为唯一性约束的源数据).您需要对数据进行一些重组以实现此目的.最简单的方法是对数组字段进行唯一约束.
> db.foo.createIndex({ emails: 1 }, { unique: true } )
> db.foo.insert({ emails: ['example@gmail.com', 'example222@gmail.com'] })
WriteResult({ "nInserted" : 1 })
> db.foo.insert({ emails: ['anotherone@gmail.com', 'example@gmail.com'] })
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error index: test.foo.$emails_1 dup key: { : \"example@gmail.com\" }"
}
})
Run Code Online (Sandbox Code Playgroud)
现在,根据您的应用程序逻辑,此电子邮件数组甚至可以替换原来的两个字段.或不.由你决定.如果没有,您将需要插入原始字段并在此数组中复制它们以进行唯一性检查.
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |