Apache CouchDB で非常に単純なユーザー システムを構築しています。メールでユーザーを検索するための簡単なビューを作成しました。
by_email
map
function(doc) {
if (doc.kind == "user" && doc.email) emit(doc.email, doc.name);
}
これは戻ります
{"id"=>"00006a80-723b-012f-6b38-1040f398478e", "key"=>"spiderman@spiderman.ai", "value"=>"Spiderman"}
今、私は非常にばかげた何かを見落としているかもしれません (もしそうなら、私は謝罪します) しかし、なぜこのビューから 2 つのフィールド (ID を数えれば 3 つ) しか取得できないのでしょうか?
通常の状況と同様に、電子メールまたはユーザー ID から開始してユーザー データベースを検索し、完全なドキュメントを取得することができます。
今、私はhttp://guide.couchdb.org/draft/cookbook.html (キーで検索) の例を読みました。特定の年齢のユーザーの名前だけです。
これがどのように適切に使用されるのか理解できません。クライアント、サプライヤーのデータベースにクエリを実行すると、1つまたは2つの値だけでなく、完全なドキュメントが返されます。
だから私の解決策は別の見方でした:
mailplus
map
function(doc) { if (doc.kind == "user" && doc.email) emit(doc.email,doc) }
そのため、メールだけでなくドキュメント全体も値として返します。これは機能しますが、ご想像のとおり、大規模なデータベースではかなり遅くなります。
問題は、単純なクエリを実行して、たとえば CouchDB - NoSQL を使用して電子メールで検索しているユーザーに関する完全な詳細を取得するより良い方法はありますか?
「NoSQLでSQLを考えることはできないので、これは間違っている」と答えたくなる誘惑があることは知っていますが、待ってください。実際のアプリケーションでは、テーブル/行などではなくドキュメントの観点からNoSQLとして考えると、完全なドキュメントが必要になる場合があります。ユーザーのために。クライアントの詳細を取得する単純なシステムがあるとします。完全な文書が必要です。最初にキー、電子メールを提供する場合にのみ、ID とキーを知る必要はありません。