如何使用猫鼬节点js保存新记录,即使同一记录中存在状态为false的相同记录也是如此

时间:2019-04-04 13:05:16

标签: node.js mongodb express mongoose mongoose-schema

即使使用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},
 ]

3 个答案:

答案 0 :(得分:1)

如果要为用户名重复输入条目,则需要从架构设计中删除“ unique:true”,因为您不能在同一集合中两次保存相同的用户名。

如果您只需要更新状态,则可以使用更新查询代替保存/插入。

答案 1 :(得分:0)

您的ID在mongodb中始终是唯一的。没有相同的ID,您只能插入数据,但不能插入相同的ID。

答案 2 :(得分:0)

从架构中删除required属性,然后可以将回调传递给pre('save', callback),该回调检查两件事:

  1. 用户名是否已经存在(只需检查Model.find({username: usernameToCheck}, callback)的返回值);
  2. 在您的callback中,检查status属性,如果该属性为false则抛出异常,否则保存您的文档。