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] Это возвращает нити, но они не сортируются.

Я мог бы также отсортировать их, но только на одном 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

Смежные вопросы