、私はそれが文書はカップルの方法で参加する実装することが可能だということを知っている:CouchDB 2.0 'Mango'を使用してドキュメント結合を実装できますか? CouchDBの1.6.1の前の仕事から
たとえば、「学生and 'courses
の簡単なスキーマを使用して:
// Students table
| Student ID | Student Name
| XYZ1 | Zach
// Courses table
| Course ID | Student ID
| COURSE1 | XYZ1
このSQLクエリ:
SELECT [Student Name], [Course ID] FROM Students RIGHT OUTER JOIN Courses ON Students.[Student ID] = Courses.[Student ID]
は、マップ機能とのCouchDB 1.6で実施することができる:
// Map function
function(doc){
if (doc.type == 'Course') emit(doc["Student ID"], doc);
if (doc.type == 'Student') emit(doc["Student ID"], doc)
}
とグループおよび軽減機能
// Group would produce:
Student ID: [{course doc}, {student doc}, {course doc}, etc]
// Reduce would allow you to then process student and course docs for a single ID (with CouchDB protesting about expanding view indexes)
それとも、どちらかのグループ化やグループ化されていないマップインデックスを反復処理するリスト機能を使用することができますどちらか。
マンゴーhereのドキュメントを見ると、_find(私は「マンゴーエンドポイント」と仮定しています)はインデックスを使用していると言います。
- あなたをすることができます
質問...私は「フィールドが別のフィールドに等しい」を言うの道が表示されていないが、その後私はすべてのマンゴーに精通していませんよマンゴーでドキュメントの結合をエミュレートしますか?
- 可能であれば、これはMapReduceを使用して同じことを行うよりも優れているか悪いですか?
この場合、私のリレーショナルデータには一貫性のないスキーマがあります。たとえば、「Books」というエンティティがあり、10の異なる書店からのデータがあるとします。各本屋には本がある行がありますが、列の名前は異なります。私の意図は、すべての「本」をソファにこすりつけて、すべての書籍の行を単一のエンティティに「平らにする」ビューを作成することです。これについてあなたの意見は何ですか? –
したがって、私が正しく理解している場合、 'Books'エンティティは最初はフラットではなく、通常のネストされた構造です。データをどのようにクエリするつもりですか?あなたはクエリ時に取得する書籍の種類を知っていますか? (基本的には、それを行う方法が複数あるので、達成しようとしていることを知る必要があります) – reddy
私はこれがあなたのオリジナルの質問に直接関係しないかもしれないことを認識しています。ここで我々はそれについて議論するためのより多くのスペースとコンテキストを持っているので – reddy