コードbody.rows.forEach ...
は、行に対してフィルター関数を実行するマップ関数です (すべての行を反復処理します) if(row.doc._id==user_id ...
。それが CouchDB ビューの動作です - まったく同じです。
しかし、これは遅いプロセスです
真実。そのため、CouchDB はインデックス (CouchDB のデータベース ディレクトリ内のファイルである B ツリー) を作成し、このインデックスを最新の状態に保ちます。すべてのリクエストのパフォーマンス上の利点は、例のようにジャストインタイムの計算ではなく、既に準備されたインデックスから結果が取得されることです。
CouchDB ビュー マップ関数は次のようになります。
function(doc) {
emit([doc._id,doc.password], null)
}
すべての行のキーは[:username,:password]
で、値はnull
です。リクエストする場合
/:db/:ddoc/_view/:name?key=[":username",":password"]
すぐに行を取得します。a&include_docs=true
を追加すると、ドキュメント全体が行に追加されます (または、ドキュメントの一部を の代わりに値として発行することもできますnull
)
CouchDB でのユーザー アカウントの処理
ユーザー アカウント、特にパスワードは機密データです。CouchDB には組み込みの_users
db があります。そのデータベースのアクセス制御の詳細については触れませんが、そこにユーザー アカウント データを保存すると言いたいと思います。. このデータベースの外部にあるアカウント データが必要な場合は、そのドキュメントを「パブリック プロファイル」として解釈してください。たとえば、ユーザーがお互いを発見して接続できるようにするためです。