Lodash _.merge函数不会用更新的信息覆盖属性

时间:2019-06-22 00:51:24

标签: node.js mongoose lodash put

在我的用户编辑路径中,我试图使用Lodash合并功能来更新从req.body中发送的更新(从Mongoose中返回)的用户文档。这是我的代码:

    const { dobYear, dobMonth, dobDay } = req.body;
    const dob = formatDob(dobYear, dobMonth, dobDay);

    const user = await db.User.findById(req.params.id); 

    const updates = pick(req.body, [ 'fullName', 'email', 'password', 'gender', 'address', 'avatar_url' ]);
    merge(user, [updates, dob]);
    let updatedUser = await user.save();

问题是,即使我在请求中发送了更新的电子邮件,合并似乎也没有实际用新的电子邮件值(来自updates)覆盖旧的电子邮件值。

2 个答案:

答案 0 :(得分:0)

merge(user,[updates,dob]);。

用法不正确。接受以下内容:

Arguments

    object (Object): The destination object.
    [sources] (...Object): The source objects.

观察...,这意味着它接受可变数量的参数。

merge(user, updates, { dob })

答案 1 :(得分:0)

您正在尝试将参数传递给merge的方式将对象与数组合并。

See documentation。我认为您的困惑来自于文档中有_.merge(object, [sources])的事实。但是,如果您在Arguments部分中看到它们,则有:

[sources] (...Object): The source objects.表示对象列表,而不是实际数组。

尝试一下:

var user = { 'a': 1, 'b': 2 };     
var updates = { 'a': 3, 'c': 4, 'email': 'aaa@bbb.com' };
let dob = '11-11-2019'

let result = _.merge(user, updates, {dob});  // <-- ...Object

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>