1

私の CouchDB データベースでは、すべてのキーの形式が「A_xxxxxxxx」で、xxxxxxxx はゼロが埋め込まれた 10 進数です (例: 「A_00000001」または「A_12345678」)。

特定のキー範囲のキーの数だけを取得したい。

たとえば、A_10000000 から A_30000000 までのキーを取得するには、次のようにクエリを実行できます。

GET DATABASE/_all_docs?startkey="A_00001000"&endkey="A_30000000"&include_docs=false

しかし、結果にはすべてのキーが含まれており、出力の "docs" フィールドの要素を数える必要があります。

私のクエリのキーの数は膨大になるため、知りたいのはキーの数だけであり、実際のキーのリストではありません。

範囲の開始値と範囲の終了値は変更できますが、これは固定ではありません。

実際のキーリストを取得せずに、指定された範囲のキーの数だけを取得することは可能ですか?

ありがとう、

4

1 に答える 1

1

_all_docs組み込みのビューを使用して、特定のキー範囲内のキーの数を取得することはできません。ただし、 CouchDB Definitive Guideで説明されているようなカスタムマップリデュースビューを使用すると、目的の結果を得ることができます。

map.js

function(doc) {
    emit(doc._id, 1);
}

reduce.js

function(keys, values, rereduce) {
    return sum(values)
}

これらのビューは、Futon管理ユーティリティを使用して、次の内容で新しいドキュメントを作成することにより、CouchDBデータベースに追加できます。

{
   "_id": "_design/test",
   "views": {
       "count": {
           "map": "function(doc) {\n    emit(doc._id, 1);\n}",
           "reduce": "function(keys, values, rereduce) {\n  return sum(values)\n}"
       }
   }
}

_design/test/count次に、の代わりにクエリを実行_all_docsして、開始キーと終了キーの間のドキュメント数を返します。

開始キーと終了キーを使用せずにデータベースでこのクエリを再度実行すると、次の結果が得られます。

{
    "rows":[
        {
            "key": null,
            "value": 185
        }
    ]
}

開始キーと終了キーを入力してクエリを再度実行すると、次の結果が得られます。

{
    "rows":[
        {
            "key": null,
            "value": 11
        }
    ]
}
于 2012-11-06T17:33:05.677 に答える