5

upsert コマンドは Meteor にいつ実装されますか?

そして、その間に同じことを行うための最良の方法は何ですか?

このようなことは、私が現時点で行っていることです:

if typeof ( item = Items.findOne({title:'Foo'}) ) == 'undefined'
    item = Items.insert({title:'Foo'})
else
    Items.update(item._id, {$set: {title:'Foo'}})
# do something with item
4

3 に答える 3

5

upsert コマンドは Meteor にいつ実装されますか?

更新: @ Thomas4019upsertは、現在サポートされていることを指摘しています。

v0.6.6

「upsert サポートを追加します。Collection.update は {upsert: true} オプションをサポートするようになりました。さらに、該当する場合、新しく挿入されたオブジェクト ID を返す Collection.upsert メソッドを追加します。」

ソース: History.md

使用法に関するドキュメント: http://docs.meteor.com/#upsert

-- 元の回答は次のとおりです --

Trello Meteor ロードマップには、その重要性を示すために投票できるカードがあります: https://trello.com/c/C91INHmj

現在、「後で」リストにあるため、多くの投票を受けない限り、実装されるまでにはしばらく時間がかかります。

注意すべきもう 1 つの重要な点は、meteor はオープンソースであるため、必要な変更を自分で実装して提出することができるということです。


その間、同じことを行う最善の方法は何ですか?

いくつかのソリューションがありますが、ユースケースに最も適したソリューションは、設計に関する知識がなければわかりません。

  1. コードをそのまま使用し、一意のインデックスをコレクションに追加し、重複キー エラーが発生した場合に処理します。

  2. 明示的なオプティミスティック コンカレンシーを実装するように設計を変更します。

これらのソリューションのコアは同じで、エラー ケースを適切に処理します。#1は実装が簡単です。#2 では、オプティミスティック コンカレンシーの処理方法の柔軟性が向上します。

于 2013-01-14T01:27:56.977 に答える
0

アップサートはこのトリックでとても簡単です。_idプロパティがあるかどうかを確認するだけです:

if(item._id){
  //update
}else{
  //insert
}
于 2016-03-26T19:33:30.770 に答える
0

本当にそうしたい場合は、mongodb 接続を直接使用できますMongoInternals.defaultRemoteCollectionDriver().mongo.db.collection('myCollection').update(query, update, {upsert: true})。もちろん、この接続は文書化されていないため、将来変更される可能性があります。

于 2013-09-22T21:49:03.450 に答える