Mic*_*ina 9 indexing unique sparse-matrix mongoose mongodb
我在我的mongodb集合上创建了一个稀疏且唯一的索引.
var Account = new Schema({
email: { type: String, index: {unique: true, sparse: true} },
....
Run Code Online (Sandbox Code Playgroud)
它已被正确创建:
{ "ns" : "MyDB.accounts", "key" : { "email" : 1 }, "name" : "email_1", "unique" : true, "sparse" : true, "background" : true, "safe" : null }
Run Code Online (Sandbox Code Playgroud)
但是,如果我插入第二个未设置密钥的文档,则会收到此错误:
{ [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 }
Run Code Online (Sandbox Code Playgroud)
任何提示?
小智 16
我也遇到过这个问题.我希望值为null或唯一.所以,我设置unique了sparse标志和标志:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Run Code Online (Sandbox Code Playgroud)
并且,我确保数据库实际上已正确创建了索引 db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
Run Code Online (Sandbox Code Playgroud)
(所以,这与此处的问题不一样:mongo _id字段重复键错误)
我的错误是将default值设置为null.在某种意义上,Mongoose将显式计null为必须唯一的值.如果该字段从未定义(或undefined),那么它不会被强制为唯一.
email: {type: String, trim: true, unique: true, sparse: true},
Run Code Online (Sandbox Code Playgroud)
因此,如果您也遇到此问题,请确保您没有设置默认值,并确保您没有将值设置为null代码中的任何其他位置.相反,如果需要明确设置它,请将其设置为undefined(或唯一值).
| 归档时间: |
|
| 查看次数: |
7523 次 |
| 最近记录: |