2013-10-24 6 views
26

私のMeteor upsert機能を動作させるのに少し問題があります。私はかなり新しく(200行のコード)新しいもので、少し問題があります。Meteor Upsertの使い方

コレクションには、単に更新するのではなく、追加の行が挿入されたままになります。私は過去30分間にグーグルで過ごしていますが、わかりやすい例は見つかりません。私も

if(Values.find(
     {},{fields: {'source':"SourceOne", 'currency': "USD"}} 
    )) { 
    Values.update(
     { 
     source: "SourceOne", 
     currency: "USD" 
     }, 
     { 
     value: res.data['data']['last']['value'], 
     time: Date.now() 
     } 
    ); 
    } else { 
    console.log('blah'); 
    Values.insert({ 
     source: "SourceOne", 
     currency: "USD", 
     value: res.data['data']['last']['value'], 
     time: Date.now() 
    }); 
    } 

を試してもそれを把握するように見えることはできません

Values.upsert(
    { 
     // Selector 
     source: "SourceOne", 
     currency: "USD" 
    }, 
    { 
     // Modifier 
     value: res.data['data']['last']['value'], 
     time: Date.now(), 
    } 
); 

は、ここに私のコードです。

+0

が試行錯誤を通じてそれを考え出した... –

+0

上記掲載ソリューションをあなたはいつものように答え素材を投稿する必要があります下のボックスに答えます。 –

+6

@MikeGraf回答を投稿するのに十分な評判がなかったので、初めてスタックに参加したときには私はできませんでした。私は今、 '//セレクタ'と '//修飾子'のコメントのために –

答えて

43

は試行錯誤を通じてそれを考え出した:

Values.upsert({ 
    // Selector 
    source: "SourceOne", 
    currency: "USD" 
}, { 
    // Modifier 
    $set: { 
     value: res.data['data']['last']['value'], 
     time: Date.now() // no comma needed here 
    } 
}); 
+2

+1をしました。私がそれらを見るまで、私はここのコンセプトを本当に理解していませんでした... – zipzit

+0

ありがとう!確かに、公式文書が例を挙げてくれることを望みます。 –

11

上記のIDには使用できません。これは、(更新と同じ構文で)私の作品:

Values.upsert(id, 
{ 
    // Modifier 
    $set: { 
     value: res.data['data']['last']['value'], 
     time: Date.now() // no need coma here 
    } 
} 
); 
+0

は私のために働く:) –

0

これを試してみてください:

values.update({"id":id}, 
     $set: { 
      value: res.data['data']['last']['value'], 
      time: Date.now() // no need coma here 
     }, 
     { upsert: true } 
    );