web-dev-qa-db-ja.com

Meteor Upsertの使い方

Meteorアップサート機能を動作させるのに少し問題があります。私はかなり新しい(200行のコード)ので、少し問題があります。

コレクションは、更新するだけでなく、追加の行を挿入し続けます。私は過去30分間グーグルで過ごしますが、理解できる例を見つけることができません。

これが私のコードです:

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

私も試しました

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()
    });
  }

そして、それを理解することはまだできないようです。

32
Varun Jain

試行錯誤によってそれを理解しました:

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

上記はIDでは機能しません。これは私にとっては機能します(updateと同じ構文を使用):

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

Mongo.Collection#upsert(selector、modifier、[options]、[callback])

議論

selector:Mongo Selector、オブジェクトID、または文字列変更するドキュメントを指定します

modifier:Mongo Modifierドキュメントを変更する方法を指定します

コールバック:関数オプション。存在する場合、最初の引数としてエラーオブジェクトを使用して呼び出され、エラーがない場合は、影響を受けるドキュメントの数が2番目の引数として呼び出されます。

オプション:一致するすべてのドキュメントを変更するには、マルチブールTrue。一致するドキュメントの1つのみを変更する場合はfalse(デフォルト)。

https://docs.meteor.com/api/collections.html#Mongo-Collection-upsert

0
YourBestBet

これを試して:

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