2011-12-29 6 views
1

У меня есть следующий запрос:Трудно CouchDB запрос

view.reduce.group_level(5).keys 

, которая возвращает:

[["1f9c79a33f399a7937d880c5f31e8dbc", 2011, 12, 29, 13], ["1f9c79a33f399a7937d880c5f31e8dbc", 2011, 12, 29, 14], ["c38332ffc275b6c70bcf06ffc39ddbdd", 2011, 12, 29, 13], ["c38332ffc275b6c70bcf06ffc39ddbdd", 2011, 12, 29, 14]] 

Первый ключ является идентификатором, а остальные ключи год, месяц, день, час

Я хотел бы все строки между 2010 и 2013 годами. Поэтому я хочу игнорировать первый ключ.

Проблема в том, что мне нужно установить первый параметр для получения результатов, но я хочу получить все результаты для всех ключей.

, например: view.reduce.group_level(5).startkey(["every_possible_key", 2010]).endkey(['every_possible_key", 2013, {}])

Если я оставить первый ключ пустой, чем я ничего не получаю. Если я дам ему «\ u9999», я получу все, и он игнорирует второй ключ.

Кто-то знает, что я делаю неправильно?

Большое спасибо.

карта:

function(d) { 
    if (d['type'] == 'State' && d['driver_id'] && d['name'] && d['created_at']) { 
     var dt = new Date(d.created_at); 
     emit([d.driver_id, dt.getFullYear(), dt.getMonth() + 1, dt.getDate(), dt.getHours()], d.name); 
    } 
    } 

уменьшить:

function(k,v,r) { 
    var result = { 
     'hire': 0, 'hired': 0, 'arrived': 0, 'pick up': 0, 'drop off': 0, 
     'missed': 0, 'rider cancel': 0, 'driver cancel': 0, 'no show': 0, 
     'avail': 0, 'unavail': 0, 'other': 0 
    }; 
    if (r) { 
     var row = null; 
     for (i in v) { 
     row = v[i]; 
     for (j in row) { 
      result[j] += row[j]; 
     } 
     } 
    } else { 
     for (i in v) { 
     if (result[v[i]] != null) { 
      result[v[i]] += 1; 
     } else { 
      result['other'] += 1; 
     } 
     } 
    } 

    return result; 
    } 

ответ

1

Что вы «делаете неправильно», чтобы использовать ключ вам не нужно в запросе в качестве первого ключа вашего зрения ,

Если вам это нужно для другого запроса, создайте другое представление.

+0

Но я хочу, чтобы это было сгруппировано с идентификатором. Я просто хочу получить больше идентификаторов в результате. –

+0

Если CouchDB не был обновлен, короткий ответ заключается в том, что вы * не можете * иметь несколько диапазонов. Тем не менее, существуют различные способы реализации обходных путей (проще всего поставить свой «ID» в качестве последнего ключа). См. Http://stackoverflow.com/questions/1991598/problem-with-two-key-ranges-in-couchdb или задайте свой вопрос в списке пользователей CouchDB. –

+0

Хорошо, спасибо! Просто невозможно с помощью Couchdb. Нужно найти другое решение с поисковой системой. Благодаря! –

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