MongoDB v2.6以降は{$set: {}}でupdateするとエラーになる其の二
誰得?な内容ですが、先日の記事の続きがあるので書いておきます。
↓先日の記事はコレ yukidarake.hateblo.jp
↓JIRAのissueはコレ
[SERVER-12266] Update no longer allows empty modifier objects - MongoDB Jira
結構根が深い
既存の処理との互換性を壊さないようにしたいですが、単に$set
を取り除くとかやると
db.hoge.update({_id: 'hoge'}, {});
になってオワタ\(^o^)/になるし、findAndModifyのパターンやupsertになっているパターンなどなど影響範囲に含まれるバリエーションも豊富。
力技での対応
対処方法も上記のJIRAになんとなく書いてました。
{$set:{}}
への対応
要は、{$set:{_id:'hoge'}}
みたいに_idをセットすることで凌げるよう。。
そんなんでいいのか・・・
ちなみに、v2.2やv2.4だと_id
は$set
できないよというエラーが起きる。
{$unset:{}}
への対応
{$unset:{___hoge___: 1}}
のように絶対に存在しないであろうプロパティを常にセットすると。
いいのかwww
{$inc:{}}
とかは?
ここまではさすがに。。。
まとめ
本当は更新内容がなければ、updateすらしないようにするべきなのでしょうが、前述のupsertのときなど、考慮することは多いです。
ただただ辛い。