1

几个月来,我们一直在 Couchbase 上开发一个新项目,虽然我们已经完成了许多视图,但我们最近才引入了我们的第一个 reduce。

reduce 函数对少于 100 行的索引进行操作,但每当我添加与映射匹配的新文档时,reduce 数据都会被完全破坏并为所有值返回零。它会保持这种状态很长一段时间,5 到 10 分钟,有时更长,然后最终开始输出预期值。

由于索引是如此之小,我想知道我可能做错了什么。我可以让它在数据过时的情况下工作 - 但变为 0 会使它不可行。我希望有人可以查看我的函数并告诉我是否以无法执行的方式编写它们。

地图:

function (doc, meta) {
  if(meta.type == "json") {
    if(doc.object == "product") {
      emit([doc.account_id, doc.test], {active: doc.active, deleted: doc.deleted} );    
    }
  } 
}

减少:

function (keys, values) {
  var out = {active: 0, inactive: 0, deleted: 0};
   for(v in values) {
    if (values[v].active == true && values[v].deleted == false) {
      out.active++
        }
    if (values[v].active == false && values[v].deleted == false) {
      out.inactive++
        }
    if (values[v].deleted == true) {
      out.deleted++
        }      
  }
  return out;
}

我们正在运行最新版本的社区版 - 2.2.0 (build-837)。它在具有大量硬件资源和很少使用的开发环境中运行。作为旁注,除了这个小障碍之外,Couchbase 一直很棒。

4

1 回答 1

2

这可能不是您的问题的根本原因,但您还没有处理函数中的re-reduce情况reduce()- 这可能会导致不正确的 reduce 结果。请参阅 Couchbase 开发人员指南部分了解自定义减少和重新减少

我还建议暂时删除该reduce()函数以验证索引在仅使用map()函数时是否按预期运行。

于 2014-09-25T06:57:06.990 回答