I've got a database of messages between users. Document looks like:
"_id": "msg_0bec56c1-cbfb-47a5-8882-4a61fec332cd",
"_rev": "1-00000eda4d07c93d0000009100000112",
"$flags": 0,
"$expiration": 0,
"Date": 1340280439303,
"OwnerId": 35,
"RcptId": 37,
"SndrId": 35,
"Text": "msg5",
"Unread": false,
"id": "0bec56c1-cbfb-47a5-8882-4a61fec332cd",
"type": "msg"
For each message it stores 2 documents with different OwnerId. I need to get the lastest message between one specified person and 10 uniqe "pen friends" ordered by last message date.
My query params:
descending=true&endkey=[35,35]&startkey=[35,35,"{}"]&limit=10&skip=0
My map function:
function (doc) {
if (doc.type == "msg"){
emit([doc.OwnerId, doc.SndrId, doc.Date, doc.RcptId], doc);
emit([doc.OwnerId, doc.RcptId, doc.Date, doc.SndrId], doc);
}
}
As a result I get list of messages for desired account. Last value (4th) in key is that value on which we should group values.
Groupping with group level 4 not working because dates are different.
function(keys,values,rereduce){ var usrs = {}; var res = []; var i=0; keys.forEach(function(key) { if (!usrs[key[0][3]]){ usrs[key[0][3]] = true; res.push(values[i]); } i=i+1; }); return res; //return values; }- m03geek