gpt4 book ai didi

node.js - findOneAndUpdate 覆盖作为 doc 传递的 2+ 级深度对象中的属性

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:40 24 4
gpt4 key购买 nike

假设我有这个架构:

var UserSchema = new Schema({
name : {
firstName : String,
lastName : String
}
});

然后我创建了这个用户:

User.create({
name : {
firstName : Bob,
lastName : Marley
}
}, function (err, user) {
if(err) {
return console.error(err);
} else {
return console.log(user);
}
});

我注意到如果我这样做:

User.findOneAndUpdate({_id: userId}, { name: { firstName : "Damian" } }, function (err, user) {
if(err) {
return console.error(err);
} else {
return console.log(user);
}
});

我现在的用户是:

user = {
name : {
firstName : "Damian"
}
}

但是,如果我这样做:

User.findOneAndUpdate({_id: userId}, { "name.firstName" : "Damian" }, function (err, user) {
if(err) {
return console.error(err);
} else {
return console.log(user);
}
});

我的用户是:

user = {
name : {
firstName : "Damian",
lastName : "Marley"
}
}

有没有办法将一个未填写所有属性的对象传递给 findOneAndUpdate,并保留之前存在的属性,而不删除它们? (与 Mongo 中的 $set 功能相同)。这真的很烦人......

最佳答案

使用 flat 展平不完整的嵌套对象,像这样:

var flatten = require('flat')

flatten({
name : {
firstName : "Damian"
}
})

// {
// 'name.firstName': 'Damian'
// }

现在您可以像在第二个示例中那样调用 findOneAndUpdate

关于node.js - findOneAndUpdate 覆盖作为 doc 传递的 2+ 级深度对象中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com