あなたの質問はもう少し詳細を使用できますが、私が理解しているように、ユーザーの「テーブル」のように機能する Couch DB ドキュメントを作成したいと考えています。そのためには、次のプロパティを使用して Couch DB に JSON ドキュメントを作成する必要があります。
{
type: "user",
username: "John",
password: "*****",
mail: "blah, blah, blah",
admin: true
}
上でルークキャンベルが指摘したように、各エンティティを識別するために独自の「タイプ」プロパティを作成する必要があります...たとえば、管理プロパティを使用して権限を持つユーザーを識別するのではなく、「タイプ」プロパティを変更するだけです:
{
type: "admin"...
}
データベースにクエリを実行し、特定のドキュメントを取得するには、map 関数を使用する必要があります。繰り返しになりますが、lukecampbell の例は良い出発点を提供します。
function(doc){
if(doc.type == "user"){
emit(doc.name, doc);
}
}
この「クエリ」は、「doc.name」順に並べられたすべての「ユーザー」エンティティ ドキュメントの「ビュー」を提供します。ここで Couch DB の利点が明らかになります... Map (および reduce) 関数は、ある意味では SQL クエリに似ています... しかし、それらは JavaScript で記述されているため、JavaScript ロジックを使用してデータベースを形成できます。
function(doc){
if(doc.type == "user" && doc.name == "John"){
emit(doc.name, doc);
}
}
これにより、ユーザー名が John であるすべての「ユーザー」ドキュメントが表示されます。おわかりのように、場合によっては、この方法でクエリを作成すると、SQL よりもはるかに表現力が高くなる可能性があります。
function(doc){
if(
doc.type == "user" &&
typeof doc.admin == "boolean"
){
emit(doc.name, "Is Admin?: " + JSON.stringify(doc.admin);
}
}
この「クエリ」は、各「ユーザー」の名前と小さなステータス メッセージ (「Is Admin?: true (or false)」) を、admin プロパティのブール値を持つすべてのユーザー ドキュメントに対して出力する必要があります。「Reduce」関数に関しては、それらは非常に便利ですが、最初に map 関数を完全に理解することがはるかに重要です。なぜなら、それらは非常に用途が広く、ほとんどの場合、適切に作成された map 関数は「reduce」関数を作成する必要をなくすからです。 ...
Couch DB には多くの可能性があります。このサイトはおそらく開始するのに最適な場所です。http://guide.couchdb.org/index.html - とはいえ、テクノロジーには非常に奇妙な癖があり、データベースの設計を再考せざるを得ないことがあります... これらの癖の 1 つは、ここで簡単に説明されています (ビクター・ニコレットの答え):
null 値で Couch DB ビューを作成することに問題はありますか?