У меня есть couchdb, который проводит серию событий. Каждое событие имеет владельца, идентификатор, время, когда оно произошло, и сообщение (плюс куча других вещей, которые не имеют значения для этого упражнения). Я хотел бы список событий, которые произошли недавно упорядочены по времени. Я просмотрел этот вопрос CouchDB - отфильтровать последний журнал для каждого зарегистрированного экземпляра из списка и попытался использовать его для сравнения с перелистыванием сравнения, чтобы сохранить первое сообщение (используя форму, в которой у меня есть сложный ключ).
К сожалению, это не совсем то, что нужно.
Вот моя функция карты
function(doc) {
var owner, id;
if (doc.owner
&& doc.stream_id
&& doc.message
&& doc.receipt_time)
{
emit([doc.owner,doc.stream_id,doc.receipt_time],
{ owner: doc.owner,
stream_id: doc.stream_id,
timestamp: doc.receipt_time,
message: doc.message
});
}
}
и моя функция уменьшения
function(keys, values) {
var challenger, winner = null;
for (var a = 0; a < values.length; a++) {
challenger = values[a];
if (! winner) {
winner = challenger;
} else {
if (winner.owner !== challenger.owner
&& winner.trace_id !== challenger.trace_id ) {
return null;
} else if (challenger.timestamp < winner.timestamp) {
winner = challenger;
}
}
}
return winner;
}
Затем я вызываю с помощью? Убывающего = true & group = true & group_level = 2, чтобы получить первое сообщение из каждого потока, однако, кажется, что оно не упорядочено по времени, а по владельцу и stream_id, как это
{"rows":[
{"key":["sam","a"],
"value":
{"owner":"sam","stream_id":"a","timestamp":1303754236482,"message":"foo"}
},
{"key":["sam","b"],
"value":
{"owner":"sam","stream_id":"b","timestamp":1303752578476,"message":"bar"}
},
{"key":["jim","j1"],
"value":
{"owner":"jim","stream_id":"j1","timestamp":1303625378839,"message":"stuff"}
},
{"key":["bob","loblaw"],
"value":
{"owner":"bob","stream_id":"loblaw","timestamp":1303328396532,"message":"more stuff"}
},
{"key":["anthony","foo"],
"value":
{"owner":"anthony","stream_id":"foo","timestamp":1303769699444,"message":"even more"}
}
]}
(Обратите внимание, что последняя запись на самом деле является самой последней во времени).
Так что мне бы хотелось, чтобы окончательный вид был таким, какой он есть сейчас, но упорядочен по времени. Есть ли способ сделать это?