没有“丢弃”的猫鼬更新对象

mongoose Update object without “drop”

我有这个型号:

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, 
           }
        } 
      )

找到这个 说要添加 $set 运算符,但它仍然会丢失数据..

如何使用 mongoose 仅​​更改 mongoDB 对象中的一个数据而不删除同一对象中的其他数据..!

您可以使用展开运算符来只更新您想要的字段,而让其他字段保持原样。因此请尝试以下代码:

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

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

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