我想基于字段timestamp
检索最新文档,该字段按某些字段分组(因此,每个字段唯一组合的最新文档)。
鉴于我有以下文件:
{ timestamp: 1, a: 'foo', b: 'bar' }
{ timestamp: 2, a: 'foo', b: 'baz' }
{ timestamp: 3, a: 'bar', b: 'qux' }
{ timestamp: 4, a: 'bar', b: 'qux' }
按a
和b
分组时,我需要以下文档:
{ timestamp: 1, a: 'foo', b: 'bar' }
{ timestamp: 2, a: 'foo', b: 'baz' }
{ timestamp: 4, a: 'bar', b: 'qux' }
在我的应用程序中,我想用a
过滤结果,例如当我只需要为b
每个唯一字段组合的文档数不受限制,a
和b
可以具有任意值。
我尝试了多种方法来解决该问题,但是我不确定哪种方法更有效。
function mapFun(doc) {
emit(doc.a, [doc.a, doc.b, doc.timestamp, doc._id]);
}
function reduceFun(keys, values, rereduce) {
if (rereruce) values = [values];
var latest = {};
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
var value = values[i][j];
var key = value[0] + value[1];
if (!latest[key] || latest[key][2] < value[2]) latest[key] = value;
}
}
var results = [];
for (var key in latest) {
results.push(latest[key]);
}
return results;
}