猫鼬更新对象,不带“ drop”

时间:2020-02-06 20:35:48

标签: mongodb mongoose save

我有这个模型:

const UserSchema = mongoose.Schema({
email:{
  type: String,
  unique: true, 
  required: true
},
password:{
  type: String,
  required: true
},
obj1: { 
  type: Object, 
  unique : true,
  dropDups : true
}
});

然后,寄存器上的初始数据为:

   new User({
              email:email,
              password:password,
              obj1:
                {
                  address: '0x1232424...', 
                  amount: 1578, 
                  time: Date.now()  
                }
            })

当我尝试更新数据时,我不能仅更改对象内部的数据,而是会更改所有对象数据。 因此,如果我只想更改金额,则删除obj1.address和obj1.time。.

     await User.update (
        { email: user[0].email }, 
        {
          obj1:{
             amount: 2245, 
           }
        } 
      )

找到了这个mongoose Update object without "drop",上面说要添加$ set运算符,但它仍然会删除数据。

如何用mongoose更改mongoDB中对象内部的一个数据,而又不删除同一对象中的其他数据。!

2 个答案:

答案 0 :(得分:0)

您可以使用 spread运算符来仅更新所需的字段,并使其他字段保持原样。因此,请尝试以下代码:

await User.update ( { email: user[0].email }, { obj1:{...obj1, amount: 2245, } } );

答案 1 :(得分:0)

您使用的更新是替换样式更新,其中整个文档都被替换为一个新样式。如果只想更新一个字段,请使用$set运算符:

.update({email: user[0].email},{$set:{"obj1.amount":2245}})