如何使用地图获取最新文档

时间:2016-06-13 11:25:11

标签: javascript mapreduce couchdb

我有以下文档,我想使用map函数获取给定UserId的最新状态

doc1: _id=id1, UserId='ABC', status='OPEN',...
doc2: _id=id2, UserId='BCD',  status='OPEN', .....
doc3: _id=id3, UserId='ABC', status='CLOSED'....

对于给定的用户标识,如果它涉及两种状态:打开和关闭,则返回具有关闭状态文档的文档

对于给定的用户标识,如果它仅与打开状态相关,则返回具有打开状态文档的文档

doc1: _id=id1, UserId='ABC', status='CLOSED',...
doc2: _id=id2, UserId='BCD',  status='OPEN', .....

我正在尝试按照以下地图执行此操作,如果Userid相同,则返回关闭状态文档,但不能正常工作,

function(doc) {
    var docArr = [];
        if (doc.event) {
       if(doc.UserId){
          docArr.push(doc)
          }
      }   
 for (var i=0; i<docArr.length; i++) {
    for(var j=0; j<i; j++) {
        if (docArr[i].UserId == docArr[j].UserId) {
        if (docArr[i].status == "CLOSED")
                  {
                   docArr.splice(j,1)
                  }
                  else(docArr[j].status == "CLOSED")
                  {
                   docArr.splice(i,1)
          }
    }
   }
}

for (var i=0; i<docArr.length; i++) {
    emit(docArr[i].UserId,docArr[i]);
   }
}

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在尝试查找相同用户ID的所有文档及其状态,使用以下地图即可轻松完成(示例不区分大小写):

emit(doc.userId, doc.status)

然后reduce函数可以处理找到正确的状态(您的值将是相同用户ID的文档,具有不同的状态,因此您可以循环查找具有关闭状态的文件或者如果未找到则返回打开状态)。 / p>