ビュー内の複合キーとして配列が指定されている場合、reduce()
を使用するとき、クエリ出力を適用するグループレベルを指定することができます。
グループ化が有効になっている場合、ビューの出力は、キー配列に応じてグループ分けされており、その情報をグループ化するために定義済み配列内のレベルを指定することができます。group_level
パラメータを使用して配列内のインデックスを指定してグループ化します。図9.14「ビューのグループ化」に詳細が記載されています。
group_level
パラメータはグルーピングしたい(1から始まる)配列のインデックスを指定し、ビュー出力ですべてのアイテムを識別するための値に基づいた一意な値を生成します:
グループレベル0
は、(配列が存在しない場合など)データセット全体によってグループ化します。
グループレベル1
は、ビューのキー配列での最初の要素の一意な値によって内容をグループ化します。たとえば、年、月、日、時、分に分割された日付データを出力するとき、一意な年ごとに出力されます。
グループレベル2
は、配列の1番目と2番目の要素の一意な値によって内容をグループ化します。日付では、これによってすべてのレコードを各グループに年と月で含めて、一意な年と月ごとに出力されます。
グループレベル3
は、ビューのキー配列の最初から3つの要素の一意な値によって内容をグループ化します。日付では、これによって、これらの最初の3つの要素をもとにすべてのアイテムが一意な日付(年、月、日)で出力されます。
グルーピングは、出力値がキーとなるような配列を使用して複合キーを出力するようなところでの出力構造として作用します。
key
、keys
、もしくはstartkey
/endkey
パラメータを使用してグルーピングや選択をするとき、クエリ値は少なくともクエリされるグループレベルの形式(と要素数)が一致します。
たとえば、日付配列による情報を出力するために、次のようにmap()
関数を使用すると:
function(doc, meta) { emit([doc.year, doc.mon, doc.day], doc.logtype); }
group_level
に2
を指定する場合、少なくとも年、月の情報を使用してキーを指定しなければなりません。たとえば、[2012,8]
のように明示的なキーを指定できます:
?group=true&group_level=2&key=[2012,8]
または範囲:
?group=true&group_level=2&startkey=[2012,2]&endkey=[2012,8]
高いレベルでグループ化しながら、年、月、日を指定することもできます。たとえば、特定の日付で選択しながら、年/月でグループ化するには:
?group=true&group_level=2&startkey=[2012,2,15]&endkey=[2012,8,10]
グループレベルよりも短い複合キーを指定すると、選択メカニズムと、startkey
とendkey
が出力する行の選択を開始、終了するために利用されるという方法のために、予期せぬ結果を出力することがあります。