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()
});
}
そして、それを理解することはまだできないようです。
試行錯誤によってそれを理解しました:
Values.upsert({
// Selector
source: "SourceOne",
currency: "USD"
}, {
// Modifier
$set: {
value: res.data['data']['last']['value'],
time: Date.now() // no comma needed here
}
});
上記はIDでは機能しません。これは私にとっては機能します(updateと同じ構文を使用):
Values.upsert(id,
{
// Modifier
$set: {
value: res.data['data']['last']['value'],
time: Date.now() // no need coma here
}
}
);
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
これを試して:
values.update({"id":id},
{ $set: {
value: res.data['data']['last']['value'],
time: Date.now() // no need coma here
} },
{ upsert: true }
);