ログ メッセージを格納するデータベースがあるとします。各メッセージには、優先度、日付、およびメッセージの情報が含まれています。アプリケーションは、優先順位によって制限され、日付順に並べられたログ メッセージを照会できる必要があります。したがってby_priority
、 のキーで呼び出されるビューを作成すると、少なくとも次のリクエストを使用して、[doc.priority, doc.date]
少なくとも の優先度値を持つすべてのメッセージを簡単に照会できます。$X
GET $database/_design/$design/_view/by-priority?startkey=[$X]&endkey=[{}]
次に、アプリケーションを拡張して、指定された基準で新しいメッセージが到着したときに自動的にフェッチするようにします。これを行うには、(クエリ パラメータで渡されmin_priority
た) 優先度以上のメッセージを選択するというフィルタを追加し、次のリクエストを行います。$X
prio
GET $database/_changes?filter=$design/max_priority&prio=$X
ただし、これは、サーバー (フィルター関数を介して) とクライアント (およびの値を構築することにより)で選択ロジック (最小、最大、優先度の範囲、優先度と日付による) を複製する必要があることを意味します。startkey
endkey
同じロジックを 2 回実装する必要は本当にありますか?
または、少なくともビューとフィルター関数の間でドキュメントのキーと値のペアを生成するコードを共有することは可能ですか? このようにして、ビュー関数を呼び出してstartkey
andendkey
パラメーターを受け入れる各ビューの汎用フィルター関数を使用できます。キーを比較するための CouchDB のアルゴリズムにアクセスする方法も必要です。そのために JavaScript からアクセスできる関数はありますか?