ゼットログ

よしなしごとを記す

ドキュメントの部分更新

バージョン0.10.0からドキュメントの部分更新ができるようになったようです。また、リビジョンを指定しなくても更新できるようになり、リラックス度が飛躍的に向上しています。詳細はこちらをご覧いただくとして、以下概略を。

1.デザインドキュメントを実装する

デザインドキュメント内のupdatesという項目内に以下のような関数を定義します。

      "in-place" : function(doc, req) {
        var field = req.query.field;
        var value = req.query.value;
        var message = "set "+field+" to "+value;
        doc[field] = value;
        return [doc, message];
      }

2.PUTメソッドで更新を実行する

以下のURIにPUTメソッドを投げれば簡単に更新できてしまう!!引数のfieldにはドキュメントの中の更新したい項目を指定します。valueには更新内容を指定します。

http://〜/db-name/_design/<design-doc-name>/_update/<func-name>/<doc-name>?field=???&value=???

curlでやるならこんな感じ。

$curl -X PUT 'http://〜/ticket/_design/d01/_update/in-place/baseball?field=price&value=777'

3.updates内の関数をカスタマイズする

関数の内容を用途に応じて充実させることができるのがおもしろい。例えば、初期値を設定すれば、更新がさらに楽になる。他にも更新要求がきたときにタイムスタンプを自動的に更新して格納するとか、値をインクリメントするなど。部分更新はこうした「仕掛け」作りの一例として成り立っているといったところだろうか。wikiにあるhelloの例もおもしろい。初期値をセットするようにすれば、とても便利になります。