2012-04-13 17 views
3

フィールド '日付'と 'グループ'のドキュメントがあります。そして、これは私の意見です:日付でソートし、グループ別にフィルタリングするにはCouchDBトリックが必要です

byDateGroup: { 
    map: function(doc) { 
    if (doc.date && doc.group) { 
     emit([doc.date, doc.group], null); 
    } 
    } 
} 

本の同等のクエリであるもの:

select * from docs where group in ("group1", "group2") order by date desc 

この簡単な解決策は、私の頭に入ってきていません。 ?:(

答えて

1

パンカジ発光しているキーの順序を次のように変更します。

emit([doc.group, doc.date], doc); 

次に、ビューを照会するときに開始キーと終了キーを渡すことができます。データを取得するグループごとに別のクエリを実行する方が簡単かもしれません。データは日付でソートされます。

私は現時点で途中出ていますが、明確でない場合は、私が戻ったときにもっと詳しく説明できます。

+0

+1これは最適なソリューションのようです。基本的にJangidは参加を求めているので、複数のリクエストとクライアントへの「参加」はおそらく最も単純なことです。 – JasonSmith

+0

合意。これは現時点で最良の方法です。 @ JasonSmithが述べたことに加えて、_list関数で追加のフィルタリングを行うこともできます。いずれの場合でも、CouchDBはすべての日付キー(タイムスタンプまたは日付配列)で「自動オーダー」します。 「難しい部分」は、インデックスから特定のグループを選ぶだけです。 – BigBlueHat

0

なぜ

function(doc) { 
    if (doc.date && ["group1", "group2"].indexOf(doc.group) !== -1)) { 
    emit([doc.date, doc.group], null); 
    } 
} 
0

あなたは、このための具体的なビューが必要です。

byDateGroup1Group2: { 
    map: function(doc) { 
    if (doc.date && doc.group && (doc.group === "group1" || doc.group === "group2") { 
     emit(doc.date, doc); 
    } 
    } 
} 

クエリdescending=trueで(おそらくリスト機能で)照会

関連する問題