2012-03-10 3 views
2

複数のキーを照会する方法と日付でソートする方法を見つけるのに苦労しています。 実際に私は、次のSQLを翻訳したいと思います:複合キーのグループに対するCouchDBのソート

SELECT * FROM THREADS WHERE GROUP_ID IN (1,2,3) ORDER BY THREAD.DATE; 

をこれまでのところ、私は、クエリキー=を渡した[1,2,3] これは、スレッドを返しますが、それらはソートされません。

Iはまた、一つだけGROUP_ID(キーとして有する:[GROUP_ID、日])にそれらを並べ替えることができしかし startkey = [GROUP_ID、{}] & endkey = [GROUP_ID] &下降=真

私はそれを組み合わせることができませんでした。

誰かが解決策を知っていますか?リレーショナル問題に対する簡単な解決策はありませんが、私は単純に、このような日にすることによりパトリックの質問を渡すことはできません

どうもありがとう、

パトリック

答えて

0

:) することは、あなたがこの回避策を試してくださいリストのデザイン(CouchDBの> = 0.10)を使用して:

{ 
    "_id": "_design/test", 
    "views": { 
    "by_date": { 
     "map": "function(doc) { 
     emit(doc.date, doc); 
     }" 
    } 
    }, 
    "lists" : { 
    "filter_groups" : "function(head, req) { 
     start({ 
     'headers': { 
      'Content-Type': 'application/json' 
     } 
     }); 
     var groups = JSON.parse(req.query['groups'] || '[]'); 
     var row; 
     var res = {rows:[]}; 
     while (row = getRow()) { 
     if (groups.indexOf(row.value.group_id) > -1) { 
      res.rows.push(row); 
     } 
     } 
     send(JSON.stringify(res)); 
    }", 
    } 
} 

をあなたはそれをこのように照会: curl -g $DB/_design/test/_list/filter_groups/by_date?groups=[1,3]を、GROUP_IDの必要の配列を渡します。

+0

これはうまくいくと思いますが、非常に遅いです。おそらく、最終的にこのようなクエリを避けるためにデータモデルを変更するのがベストでしょう... – user1003331