我的文档有一个以毫秒为单位的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条件的旧文档。我错过了什么?
答案 0 :(得分:1)
行为在CouchDB views documentation中解释(强调是我的):
当您查询视图时,CouchDB会获取源代码并在数据库中的每个文档上为您运行它。如果你有很多文件,这需要相当多的时间,你可能想知道这样做是不是非常低效。是的,它会,但CouchDB旨在避免任何额外的成本:它只在您第一次查询您的视图时运行一次所有文档。如果更改了文档,则只运行一次map函数,以重新计算该单个文档的键和值。
假设您的文档未更改,则在查询视图时不会重新评估条件,并且会返回包含旧时间戳的文档。
希望这有帮助!