如何在mongo中指定多个字段的唯一性,而不是组合?

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已经存在于另一个领域的另一个文档中.

Ser*_*sev 6

在我的头脑中,没有数据库可以做到这一点(使用另一个列/字段作为唯一性约束的源数据).您需要对数据进行一些重组以实现此目的.最简单的方法是对数组字段进行唯一约束.

> 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)

现在,根据您的应用程序逻辑,此电子邮件数组甚至可以替换原来的两个字段.或不.由你决定.如果没有,您将需要插入原始字段在此数组中复制它们以进行唯一性检查.