ドキュメントベースのストレージとデータの問い合わせにmap/reduceのビューを使用する主な利点のひとつは、事前の宣言やさらには複数ドキュメント間で同じ構成にする必要がなく、ドキュメントを保存できる構造であるということです。
代わりに、ビューがデータベースに保存される受信ドキュメントの構造を定義して処理し、そして、map/reduceの段階でこのデータを再フォーマット、再構造化することが可能です。これは初期化フォーマット時とそのあとの両方で情報の格納を単純化していて、ドキュメントのフォーマットと構造があとでも変更可能になります。
たとえば、次のようなJSON構造を使用して、名前の情報を格納し始めます:
{ "email" : "mc@example.org", "name" : "Martin Brown" }
ビューは、emailとnameを出力するように定義します:
function(doc, meta) { emit([doc.name, doc.email], null); }
これは、nameとemailの情報を含むインデックスを生成します。そのあとで、アプリケーションが姓と名を別々に格納するように変更されます:
{ "email" : "mc@example.org", "firstname" : "Martin", "lastname" : "Brown" }
一貫したビューを出力しながら、ビューが新旧両方のドキュメントタイプを処理するように修正します:
function(doc, meta) { if (doc.name && (doc.name != null)) { emit([doc.name, doc.email], null); } else { emit([doc.firstname + " " + doc.lastname, doc.email], null); } }
このスキーマレスの特徴とビューの定義は、情報のフォーマットが変更されたときに、初期のスキーマ定義や明示的なスキーマを変更する必要なく、柔軟なドキュメント構造と、その進化を可能にします。