2017-08-07 6 views
1

私が達成しようとしているのは、user.profileに既に存在する古い非更新データを保持することです。Meteorの動的オブジェクトでuser.profileを更新してください

だから、私の最初のuser.profileは以下があります。

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

し、更新する必要がない場合、私は次のことを追加したいので、もし私の更新方法では、私は、これらの値を維持したいと思います:

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

オブジェクトをマージして更新した更新プロファイルが必要です。私が使用してみました何

私は古いデータが完全に新しいデータに置き換えられますuser.profileを更新しようとすると、updateupsertが、どちらの場合も、すべての私のテストである...ここで

はの一つであり、私の最新の試み:

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

私も試してみました:

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

どのように私は私が必要なものを達成することができますか?おかげ

答えて

2

Mongo documentationから:

$集合演算子は、指定された値を持つフィールドの値を置き換えます。

あなたは{ $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 }); 
+0

恐ろしい、私は非常にソリューションのように。それは魅力として働く!乾杯! –

関連する問題