2012-03-10 44 views
2

我很难找到如何查询多个键和按日期排序。 其实我想翻译下面的SQL:CouchDB在一组复杂的键上排序

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

到目前为止,我经过查询键= [1,2,3] 这将返回线程,但它们没有排序。

我还可以对它们进行排序,但是仅在一个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 2012-07-31 16:36:03