即使使用mongoose node js在唯一架构中存在一条状态为false的记录,也需要保存新记录。我有一条记录与{status:false}
一起删除状态,同时将状态从true更改为false。现在,我尝试添加新记录。但新记录并未创建。因为我已经在猫鼬模式中应用了unique: true
。我需要应用unique:true,但同时如果存在状态为false,则需要创建新记录。任何人都可以提出建议
猫鼬,带有mongoose-beautiful-unique-validator的nodejs
//schema model
var userSchema = new mongoose.Schema({
userName: {
type: String,
required: true,
unique: true
})
//save user function inside module export function
const user= mongoose.model('userSchema');
user.userName = fields.username;
user.save((err, doc) => {
if (!err){
res.send(true);
} else {
console.log(err);
return;
}
})
预期结果:
[
{_id: 12345, userName: 'Uday', status:false},
{_id: 67894, userName: 'Uday', status:true}
]
实际结果: 当我尝试使用状态为true的Uday保存名称时,出现重复错误
[
{_id: 12345, userName: 'Uday', status:false},
]
答案 0 :(得分:1)
如果要为用户名重复输入条目,则需要从架构设计中删除“ unique:true”,因为您不能在同一集合中两次保存相同的用户名。
如果您只需要更新状态,则可以使用更新查询代替保存/插入。
答案 1 :(得分:0)
您的ID在mongodb中始终是唯一的。没有相同的ID,您只能插入数据,但不能插入相同的ID。
答案 2 :(得分:0)
从架构中删除required
属性,然后可以将回调传递给pre('save', callback)
,该回调检查两件事:
Model.find({username: usernameToCheck}, callback)
的返回值); callback
中,检查status
属性,如果该属性为false则抛出异常,否则保存您的文档。