我在mongodb集合上创建了一个稀疏且唯一的索引。
var Account = new Schema({
email: { type: String, index: {unique: true, sparse: true} },
....
已正确创建:
{ "ns" : "MyDB.accounts", "key" : { "email" : 1 }, "name" : "email_1", "unique" : true, "sparse" : true, "background" : true, "safe" : null }
但是如果我插入第二个未设置密钥的文档,则会收到此错误:
{ [MongoError: E11000 duplicate key error index: MyDB.accounts.$email_1 dup key: { : null }]
name: 'MongoError',
err: 'E11000 duplicate key error index: MyDB.accounts.$email_1 dup key: { : null }',
code: 11000,
n: 0,
ok: 1 }
任何提示?
答案 0 :(得分:16)
我也遇到过这个问题。我希望值为null或唯一。所以,我设置了unique
和sparse
标志:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
而且,我确保数据库实际上已使用db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(所以,不与此处的问题相同:mongo _id field duplicate key error)
我的错误是将default
值设置为null
。在某种意义上,Mongoose将显式null
计为必须唯一的值。如果从未定义该字段(或undefined
),则不强制该字段是唯一的。
email: {type: String, trim: true, unique: true, sparse: true},
因此,如果您遇到此问题,请确保未设置默认值,并确保您未在代码中的任何其他位置将值设置为null
。相反,如果您需要明确设置它,请将其设置为undefined
(或唯一值)。