使用Meteor中的动态对象更新user.profile



所以,我要实现的是更新user.profile,保持旧的未更新数据已经存在于user.profile中。

因此,我的初始user.profile如下:

{
accountType: 'Student',
xyz: 'something',
etc...
}

在我的更新方法中,如果不需要更新,我想保留这些值,所以如果我想添加以下内容:

{
'xyz': 'something else',
'bar': 'bar',
etc...
}

我希望看到更新的配置文件,同时合并和更新对象。

我尝试使用的都是updateupsert但是在这两种情况下以及当我尝试更新旧数据user.profile时的所有测试中,旧数据都会被新数据完全替换......

这是我的最新尝试之一:

Meteor.users.update(this.userId, {
$set: {
profile: data
}
},
{ upsert: true });

但我也尝试过:

Meteor.users.upsert(this.userId, {
$set: {
profile: data
}
});

我怎样才能实现我需要的?谢谢

来自 Mongo 文档:

$set运算符将字段的值替换为指定的值。

因此,当您将其更新为{ $set: { profile: ... } }时,它会替换整个profile文档。

你应该像这样使用它:

$set: {
'profile.<field_name>': '<field_value>',
...
}

以下是为您的情况执行此操作的代码:

const $set = {};
_.each(data, (value, key) => {
$set[`profile.${key}`] = value;
});
Meteor.users.update(this.userId, { $set });

最新更新