我有这样的东西:
var mongoose = require('mongoose');
mongoose.connect('mongodb://...');
var UserSchema = mongoose.Schema({
name: {
type: String,
unique: true
},
token: {
type: String,
unique: true,
sparse: true
}
});
var User = mongoose.model('User', UserSchema);
var peter = new User();
peter.name = 'peter';
peter.token = null;
peter.save(function(err) {
if (err) console.log(err);
console.log('done with peter');
var john = new User();
john.name = 'john';
john.token = null;
john.save(function(err) {
if (err) console.log(err);
console.log('done with john');
});
});
所以 peter
先创建,然后是 john
。但是,当 john
被保存时 mongoose
返回以下错误
{ [MongoError: E11000 duplicate key error index: node-login.users.$token_1 dup key: { : null }]
name: 'MongoError',
err: 'E11000 duplicate key error index: node-login.users.$token_1 dup key: { : null }',
code: 11000,
n: 0,
lastOp: 0,
connectionId: 4527333,
ok: 1 }
代码在 mongolab 上试过运行 mongo v2.0.7
和 mongoose v3.5.1
。
我认为将索引设置为 sparse
允许多个 null
值。索引已正确设置为 mongolab 后端中的“索引”选项卡显示 true
unique
和 sparse
。我为什么会收到错误有什么想法吗?
最佳答案
A sparse index仅当文档有该字段时才索引该字段。该字段是设置为 null
还是其他值并不重要,如果存在,仍会检查其唯一性。
因此,在您的情况下,完全省略 token
字段的设置,而不是将其设置为 null
。
关于node.js - 唯一和稀疏索引导致重复错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904246/