Node.js 使猫鼬属性不再唯一
我在猫鼬身上犯了一个奇怪的错误。当用户注册时,他们会给出所属组织的名称。以前,这需要是唯一的。我的模式是:Node.js 使猫鼬属性不再唯一,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在猫鼬身上犯了一个奇怪的错误。当用户注册时,他们会给出所属组织的名称。以前,这需要是唯一的。我的模式是: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var Organisation = new mongoose.Schema({ name: { type: String, required: true, unique: true }, createdById: {
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Organisation = new mongoose.Schema({
name: {
type: String,
required: true,
unique: true
},
createdById: {
type: Schema.Types.ObjectId,
ref: 'User'
},
createdOn: {
type: Date,
"default": Date.now
},
availableUntil: {
type: Date
}
});
Organisation.path('name').validate(function(value, done) {
var self = this;
if (!self.isNew) {
return done(true);
} else {
//mongoose.models['Organisation'] or self.model('Organisation')
mongoose.models['Organisation'].count({
name: value
}, function(err, count) {
if (err) {
return done(err);
}
return done(!count)
});
}
}, "This email already exists");
mongoose.model('Organisation', Organisation);
但现在没关系了,一个组织的名称不需要是唯一的。因此,我改为:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Organisation = new mongoose.Schema({
name: {
type: String,
required: true
},
createdById: {
type: Schema.Types.ObjectId,
ref: 'User'
},
createdOn: {
type: Date,
"default": Date.now
},
availableUntil: {
type: Date
}
});
mongoose.model('Organisation', Organisation);
注意如何删除unique:true
我重新启动了服务器,但奇怪的是,我仍然得到错误:
name: 'MongoError',
message: 'E11000 duplicate key error index: redmatter.organisations.$name_1 dup key: { : "delete me" }',
driver: true,
code: 11000,
index: 0,
errmsg: 'E11000 duplicate key error index: redmatter.organisations.$name_1 dup key: { : "delete me" }',
getOperation: [Function],
toJSON: [Function],
toString: [Function] }
这怎么可能?当我不在乎名称是否唯一时,为什么会出现重复键错误?“注意,唯一性:true已被删除。”->nope?oops typo,它已被删除,相同的错误解决了,我必须删除索引是的,一旦代码至少触发一次,从代码中删除不会改变任何内容。这是因为mongoose将创建唯一索引。你必须把它放在数据库的一边。“注意,唯一性:true被删除了。”->nope?oops打字错误,它被删除了,同样的错误。我发现,我必须删除索引是的,一旦代码至少触发一次,从代码中删除不会改变任何东西。这是因为mongoose将创建唯一索引。你必须把它放在数据库的一边。