1

私のcouchDBデータベースには、次のdoc.my_key == "value"ようなドキュメントのみを出力するフィルターがあります。

{
  "id": "_design/test".
  "filters": {
    "value_only": "function(doc){return (doc['my_key'] == 'value');}"
  }
}

このような2つのドキュメントを書くとき:

{
  "id": 1,
  "my_key": "cheeky"
}

{
  "id":2,
  "my_key": "value"
}

次に、json は次のようになり/this_database/_changes?filter=test/value_onlyます。

{
  "results":[
    {"seq":2,"id":"2","changes":[{"rev":"1-463e18b34dfa529dd9b39981ad3293f4"}]},
  ],
  "last_seq":4
}

これはカッコいい。CouchDB はクールです。ただし、ドキュメント#2を次のように更新します。

{
  "id":2,
  "my_key": "no longer value"
}

フィルタリングされた変更フィードは空になりました。これは、ドキュメントが更新されると、そのドキュメントの以前のシーケンス番号が変更フィードから削除されるためであることはわかっていますが、渡すことができるパラメーター/構成編集を行って、その最新の発行されたリビジョンが返されるようにすることはできますか?文書のID?

4

1 に答える 1

1

突然、変更フィードにそのようなパラメーターがなくなりました。すべての変更イベントを処理できる唯一の方法は、フィードを継続的なストリームとしてリッスンすることです。ただし、この場合でも、コンパクション操作との競合状態により、受け取ったリビジョン番号が利用可能になるという保証はありません。

変更フィードは、競合があった場合 (たとえば、ドキュメントに異なるリーフ リビジョンの 2 つの「ヘッド」がある場合) に、リーフ リビジョンと勝者リビジョンのみを発行します。後者の場合?style=all_docs、クエリ引数を渡して、ドキュメントの既存のすべてのリーフを取得できます。

例えば:

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
' Document with _id foo                                             '
'                                                                   '
' +-----------------+       +-------+       +-------+     +-------+ '
' |      1-abc      | ----> | 2-cde | ----> | 3-fgh | --> | 4-ijk | '
' +-----------------+       +-------+       +-------+     +-------+ '
'                             |                                     '
+ - - - - - - - - - - - -     |         - - - - - - - - - - - - - - +
                          '   |       '
                          '   |       '
                          '   v       '
                          ' +-------+ '
                          ' | 3-123 | '
                          ' +-------+ '
                          '           '
                          + - - - - - +

デフォルトの動作 ( style=main_only) では、優勝リビジョン: が生成されます4-ijkstyle=all_docs、変更フィードでは、このドキュメントの3-123とリビジョンの両方が生成されます。4-ijk

確かではありませんが、データベースのデータ構造の最適化された使用法と、すべての非リーフ リビジョンを処理する圧縮による競合に対する保護であると思います。

于 2013-01-15T11:01:58.763 に答える