Search:

Search all manuals
Search this manual
Manual
Couchbase Server マニュアル 2.0
Community Wiki and Resources
Couchbase Server 2.0をダウンロード
Couchbase 開発者ガイド 2.0
クライアントライブラリ
Couchbase Server フォーラム
Additional Resources
Community Wiki
Community Forums
Couchbase SDKs
Parent Section
9.5 ビューの記述
Chapter Sections
Chapters

9.5.1. Map関数

map関数はビューの最も重要な部分で、Couchbaseに保存された個々のオブジェクトの入力フィールドと、ビューにアクセスした際の出力情報の論理的なマッピングを提供します。

このマッピングプロセスを通じて、map関数とビューは次を提供します:

アプリケーションはREST APIやCouchbaseクライアントライブラリを介してビューにアクセスします。全てのクライアントライブラリはビューシステムにクエリをサブミットし、結果を取得して、処理するためのメソッドを提供します。

map関数の基本的な操作は、以下の図で見ることができます。

図9.9 ビュー — Map関数の記述

ビュー — Map関数の記述

この例では、map関数がName, City, Salaryといったフィールドを、Couchbaseバケットに保存されたJSONから取得し、これらのフィールドの表にマッピングします。このmap関数は次のようになります:

Javascript
function(doc, meta)
{
  emit(doc.name, [doc.city, doc.salary]);
}

ビューが生成されるとき、map()関数は格納された各ドキュメントのための2つの引数(docmeta)を提供します:

Couchbaseバケットにあるすべてのドキュメントが順番にmap()関数にわたされます。ビューが作成された後は、最後の更新の後に作成、変更されたドキュメントのみがビューで処理されます。ビューインデックスと更新はビューがアクセスされたときにマテリアライズされます。最後のビューへのアクセスのあとに追加もしくは変更されたドキュメントは再度map()関数にわたされるので、ビューは更新され、データバケットの現在の状態が反映されます。

map()関数の内部では、整形、計算、もしくはその他の詳細な処理をすることができます。ビュー情報を生成するためには、emit()関数の呼び出しを使用しています。emit()関数を呼び出すたびに、生成されたビューの内容にひとつの行もしくはレコードが出力されます。

emit()関数は生成されたビューの各レコードとして2つの引数、keyとvalueを受け入れます。

キーと値の形式は、あなた次第です。これらを単一の値、文字列や、配列やJSONといった複合値としてフォーマットすることができます。ビューの定義で生成したキーと同一の形式でキーを指定する必要があるので、キーの構造は重要です。

emit()は、1回のmap関数で何回も呼び出すことができ、各呼び出しは生成されたビューの1行を出力します。データベース内の複合フィールドをベースにした情報に対するクエリをサポートしたい場合に便利です。ビューの定義と選択基準の例については、「複数行の出力」を参照してください。

ビューとマップの生成は非常に寛容です。入力JSONオブジェクト内に存在しないフィールドを出力することを選択する場合、null値で単純に置き換えられ、エラーは生成しません。

例えば、以下のビューでは、いくつかの入力レコードはビューで指定された全てのフィールドを含んでいません。ビューの結果の中には、value出力のフィールドにただのnullのエントリが表示されます。

図9.10 ビュー — 存在しないフィールドでのMap関数の記述

ビュー — 存在しないフィールドでのMap関数の記述

注記

入力データ内に該当のフィールドが存在するか、map処理内で行を出力する前にチェックするべきでしょう。

異なるタイプの情報を出力し、それを取得するために、map関数がどのように動作するのか、より良く理解するには、「ビューとクエリのパターンの例 」を参照してください。