【问题标题】:How can get newest document just using the map如何仅使用地图获取最新文档
【发布时间】:2016-06-13 11:25:10
【问题描述】:

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

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

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

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

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]);
   }
}

【问题讨论】:

    标签: javascript mapreduce couchdb


    【解决方案1】:

    如果我理解正确,您正在尝试查找同一用户 ID 的所有文档及其状态,这很容易使用以下地图(示例不区分大小写):

    emit(doc.userId, doc.status)
    

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

    【讨论】:

    • 谢谢 Seb,正如您的建议,我可以使用 reduce 来实现这一点,问题是如果在地图中,我怎样才能一次获得给定用户 ID 的整个文档:我使用 emit (doc.userId, [doc.status,doc]),我总是收到“reduce_overflow_error”、“reason”的错误:“减少输出必须更快地缩小:
    • 嗨,Seb,谢谢你的大力帮助,你能帮我看看这个:如何合并文档以及如果一个文档中的某些字段在另一个文档中不存在(视图中的关键在另一个中不存在),stackoverflow.com/questions/37759830/…
    • 嗨 Seb,谢谢你的大力帮助,你能帮我看看这个吗:我非常坚持:stackoverflow.com/questions/37814311/…
    • 嗨,Seb,我非常坚持我客户的要求,真的不知道希望你今天能帮助我,非常感谢stackoverflow.com/questions/37814311/…
    • 嗨 Seb,你能帮我看看这个,如果可以改变我们在 reduce 函数中发出的内容吗? stackoverflow.com/questions/37814311/….
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多