1

私はcouchdbの初心者なので、誤解しているかもしれませんので、教えて議論してください

ドキュメント タイプ - ユーザー - トピック - コメント

要件 - Webboard をしたい - この複雑なドキュメントを取得するための 1 つのリクエスト

出力 I need KEY "topic-id" , VALUE { _id : "topic-id", created_at:"2011-05-30 19:50:22", title:"Hello World", user: {_id : "user- 1",type:"user",username:"dominixz",signature:"http://dominixz.com"} コメント: [ {_id:"comment-1", text:"Comment 1",created_at:"2011 -05-30 19:50:22"、ユーザー: {_id: "user-1"、タイプ:"ユーザー"、ユーザー名:"dominixz"、署名:"http://dominixz.com"}}、{_id :"comment-2", text:"Comment 2",created_at:"2011-05-30 19:50:23",user: {_id : "user-2",type:"user",username:"dominixz2 ",signature:"http://dominixz1.com"}}, {_id:"comment-3", text:"コメント 3",created_at:"2011-05-30 19:50:24"、ユーザー: {_id : "user-3"、タイプ:"ユーザー"、ユーザー名:"dominixz3"、署名:"http://dominixz2.com"}}、] }

次のような「ユーザー」データがあります {_id:"user-1",type:"user",username:"dominixz",signature:"http://dominixz.com"} {_id:"user-2", type:"user",username:"dominixz2",signature:"http://dominixz1.com"} {_id:"user-3",type:"user",username:"dominixz3",signature:"http: //dominixz2.com"}

このような「トピック」データ {_id : "topic-id",created_at:"2011-05-30 19:50:22",title:"Hello World",user:"user-1"}

{_id:"comment-1",type:"comment" , text:"Comment 1", created_at:"2011-05-30 19:50:22" , user: "user-1" のような「コメント」データ, topic:"topic-id"} {_id:"comment-2",type:"comment" , text:"Comment 2", created_at:"2011-05-30 19:50:23" , user: "user -2"、トピック:"トピック ID"} {_id:"コメント-3"、タイプ:"コメント"、テキスト:"コメント 3"、created_at:"2011-05-30 19:50:24"、ユーザー: 「ユーザー-3」、トピック:「トピック ID」}

この複雑なデータを実現するためにマップ、リデュース、リストを作成するにはどうすればよいですか? そして、DBのように LIMIT 、 OFFSET を使いたいときはどうですか

少し早いですがお礼を

4

2 に答える 2

1

ここで何を探しているのかを伝えるのは少し難しいですが、この Web ページに記載されているように、従来の CouchDB への参加を求めていると思います。

全体を読むことをお勧めしますが、オチは次のようになります (データ用に翻訳されています)。

function (doc) {
    if (doc.type === 'topic') {
        emit([doc._id, 0, doc.created_at], null);
    } else if (doc.type === 'comment') {
        emit([doc._id, 1, doc.created_at], null);
    }
}

そのマップは、トピック ID とそれに続くすべてのコメントを時系列で返します。nullは、インデックスが大きくなりすぎるのを防ぎinclude_docs=trueます。必要なときに完全なドキュメントをプルするリクエストをいつでも追加できます。または、そこに興味深いビットを含めるインデックスのベスト プラクティスを使用できます。

于 2011-08-31T07:04:05.360 に答える
0

CouchDB はドキュメント データベースであり、リレーショナル データベースではありません。そのため、関連するすべてのデータを含むドキュメントを処理するのに最適です。あなたが行ったようにスキーマのリレーショナル スタイルを正規化することはできますが、これは Couch の最適な使用例ではないと私は主張します。

Couch で CMS を設計するとしたら、トピック、コンテンツ、コメントをすべて 1 つのドキュメントにまとめます。それはあなたの問題を直接解決するでしょう。

もちろん、ドキュメント ストアを使用してリレーショナル データベースをエミュレートすることは自由ですが、それは自然なユース ケースではないため、次のような疑問が生じます。

于 2011-08-18T10:46:17.903 に答える