我有这个模型:
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中对象内部的一个数据,而又不删除同一对象中的其他数据。!
答案 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}})