データ間のJOINは、さらには調査対象のドキュメントが同じバケット内に含まれているとき、ビューシステム内で直接はできません。しかし、ビューの情報を出力するとき、リンクするために使用される共通フィールドを使用することでこれをシュミレートすることができます。たとえば、2つの異なるレコードタイプ、'ブログ投稿'と'ブログコメント'をサポートするブログ投稿システムを考えます。'ブログ投稿'のための基本的な形式は次のとおりです:
{ "type" : "post", "title" : "Blog post" "categories" : [...], "author" : "Blog author" ... }
対応するコメントレコードはドキュメント構造内にブログ投稿IDを含んでいます:
{ "type" : "comment", "post_id" : "post_3454" "author" : "Comment author", "created_at" : 123498235 ... }
ブログ投稿とそのブログ投稿に関連するコメントレコードをすべて出力するには、次のビューを使用できます:
function(doc, meta) { if (doc.post_id && doc.type && doc.type == "post") { emit([doc.post_id, null], null); } else if (doc.post_id && doc.created_at && doc.type && doc.type == "comment") { emit([doc.post_id, doc.created_at], null); } }
ビューキーとして配列を使用しているとき、ビューはソートアルゴリズムを利用します。ブログ投稿のレコードについては、ドキュメントIDが配列の2番目の値をnullとして出力されるので、ブログ投稿のレコードはビューからのソートされた出力の最初に現れます。コメントレコードについては、最初の値はブログ投稿のIDであり、対応する親のブログ投稿レコードの行でソートされ、配列の2番目の値はコメントを作成した日付であり、子のコメントをソートすることを可能にします。
例:
{"rows":[ {"key":["post_219",null], "value":{...}}, {"key":["post_219",1239875435],"value":{...}}, {"key":["post_219",1239875467],"value":{...}}, ] }
もうひとつの方法としては、メインCouchbase SDKを使用したクライアント内で、複数のGET操作を使用することで、これはキャッシュからデータをロードします。これは、子コメントレコードの配列を含むブログ投稿を使用してデータを構成することができます。 たとえば、ブログ投稿の構造は次のようになります:
{ "type" : "post", "title" : "Blog post" "categories" : [...], "author" : "Blog author", "comments": ["comment_2298","comment_457","comment_4857"], ... }
ブログ投稿の情報と対応するコメントを取得するには、ブログ投稿のレコードを検索するためのビューを作成し、そのあとで、Couchbase Serverのキャッシュからすべてのコメントレコードを取得するためクライアントSDK内で2つ目の呼び出しをしてください。