2012-05-17 2 views
0

Я пытаюсь отобразить записи журнала приложение от CouchDB - каждая запись журнала содержит метку времени, бревенчатый тег и удаленный IP клиента, моя функция карта:Карта составной ключ сортировки

{ 
"_id": "_design/log", 
"language": "javascript", 
    "views": { 
     "browse": { 
      "map": "function(doc){ if (doc.type=='log') {emit([doc.date,doc.tag,doc.ip], doc);}}" 
     } 
    } 
} 

Теперь, как я могу получить записи журнала для определенного IP (тега), отсортированного по дате?

Уже пробовал варианты: /_design/log/_view/browse?startkey=["info","8.8.8.8 "] без каких-либо успехов.

ответ

0

Ваш ключ запуска требует 3 элемента: дата, тег и ip.

Ваш неуспешный запрос содержит только два элемента в стартовом ключе.

Существует некоторая документация для составных клавиш. В используемом примере у них есть другой ключ для года, месяца и дня. Вы можете найти пример в этой книге: функция http://shop.oreilly.com/product/0636920018247.do

+0

Я не ввожу ключ «дата», потому что хочу все «данные» для ip 8.8.8.8 – Jhon

+0

Что делать, если вы переопределите ключи в функции уменьшения карты, чтобы ключ даты был последним, а не первым ? – Teddy

+0

Результаты с сокращением не отсортированы, поэтому я не получаю результатов в дате order.emitting [tag, ip], возможно, предлагает несколько вариантов сортировки в сокращении. – Jhon

-1

Карта:

function(doc) { 
    if (doc.type === 'log') { 
    emit([doc.tag, doc.ip, doc.date], 1); 
    } 
} 

параметры запроса (правильно URL-кодировке):

?startkey=["info","8.8.8.8"]&endkey=["info","8.8.8.8",{}]&include_docs=true 

Результаты сортируются по дате, так как тег и ip фиксированы.

+0

Это нормально, но как я могу получить все записи «info», отсортированные по дате? - Другая точка зрения? – Jhon

+0

Может быть. Вид в CouchDB похож на индекс в реляционной БД: если вам нужно запрашивать/сортировать по заданному полю, вам нужно представление, или вы можете фильтровать/сортировать результаты на клиенте, или вы можете использовать функцию [list ] (http://guide.couchdb.org/draft/transforming.html). Нет ни одного хорошего ответа, вам нужно оценить преимущества и недостатки каждого решения для вашего прецедента. –

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