同じバケット内で異なるドキュメントタイプを格納したい場合、map()
フェーズで指定したレコードタイプのみでビューが生成されたかどうか確認した方がよいでしょう。これは、レコードを選択するためにif
文を使用して実現できます。
たとえば、ブログの投稿とコメントを同じバケットに格納する場合、ブログの投稿のビューが次のmapを使用して作成されます:
function(doc, meta) { if (doc.title && doc.type && doc.date && doc.author && doc.type == 'post') { emit(doc.title, [doc.date, doc.author]); } }
同じ解決方法が、特定のクエリ構造を許可しながら、特定の範囲、もしくは値のドキュメントのビューを作成したい場合にも使用できます。たとえば、統計ログシステムから日付範囲でwarningタイプのすべてのレコードをフィルタリングするために、次のmap()
関数を使用できます:
function(doc, meta) { if (doc.logtype == 'error') { emit([doc.year, doc.mon, doc.day],null); } }
同じ解決策は特定の複合クエリタイプでも使用できます。たとえば、30分以内で料理できて、特定の食材を使用したすべてのレシピは:
function(doc, meta) { if (doc.totaltime && doc.totaltime <= 20) { if (doc.ingredients) { for (i=0; i < doc.ingredients.length; i++) { if (doc.ingredients[i].ingredtext) { emit(doc.ingredients[i].ingredtext, null); } } } } }
上記の関数は、クエリとkey
パラメータを使用することによりレシピの選択をかなり早く、簡単にしています。料理時間と食材がビューによって生成されるとき、選択したレシピに必要な範囲に作用する代わりとなります。
これらの選択はアプリケーション固有のものですが、適切な値の範囲、例えば30、60、または90分の様々なビューを生成することによって、ビューインデックスを追加したときに発生する更新をせずに、レシピ選択がはるかに簡単になります。