从给定时间戳开始计算文档

时间:2017-04-11 06:06:06

标签: cloudant

我的文档有一个以毫秒为单位的timestamp属性和一个分组属性,情感。

{
  emotion: "sad",
  timestamp: 1491889810157
}

我正在尝试首先过滤时间戳的文档>动态值,然后根据情感属性进行分组和计数。

地图功能:

function (doc) {
  if((Date.now()-doc.timestamp) <= 60000) {
    emit(doc.emotion, 1);
  }
}

降低: _count

我正在寻找的最终结果是(或类似于计数和情感价值:

{
  "sad":8,
  "joy":15
}

调用此视图的Node.js代码以:

开头
db.view(design, view, {reduce: true, group: true, update: true}, (err, body) => {

但是,Map Reduce函数会返回不符合if条件的旧文档。我错过了什么?

1 个答案:

答案 0 :(得分:1)

行为在CouchDB views documentation中解释(强调是我的):

  

当您查询视图时,CouchDB会获取源代码并在数据库中的每个文档上为您运行它。如果你有很多文件,这需要相当多的时间,你可能想知道这样做是不是非常低效。是的,它会,但CouchDB旨在避免任何额外的成本:它只在您第一次查询您的视图时运行一次所有文档。如果更改了文档,则只运行一次map函数,以重新计算该单个文档的键和值。

假设您的文档未更改,则在查询视图时不会重新评估条件,并且会返回包含旧时间戳的文档。

希望这有帮助!