Mapreduce 在reduce函数中过滤时间戳-某种日期。现在?

Mapreduce 在reduce函数中过滤时间戳-某种日期。现在?,mapreduce,couchdb,Mapreduce,Couchdb,Date.now类型函数是否可以用于map或reduce函数?它能在任何地方使用吗? 更具体地说,视图不能缓存Date.now值。 以下是我测试的内容,仅在任何视图函数更改后的第一次运行中有效: function (doc){ var n = new Date(); if(doc.TimeStamp > n.getTime() - 30000){ emit(doc._id, doc); } } 对var now=new Date()应该可以工作 该条件必须导致错误。您

Date.now类型函数是否可以用于map或reduce函数?它能在任何地方使用吗? 更具体地说,视图不能缓存Date.now值。 以下是我测试的内容,仅在任何视图函数更改后的第一次运行中有效:

function (doc){
  var n = new Date();
  if(doc.TimeStamp > n.getTime() - 30000){
    emit(doc._id, doc);
  }
}

var now=new Date()
应该可以工作

该条件必须导致
错误
。您可以使用以下视图对其进行测试:

function (doc) {
  var now = new Date()
  var timestamp = now.getTime()

  emit(timestamp,null)
}
它的反应是

{
  "total_rows":1,
  "offset":0,
  "rows" :[{
   "id":"ecd99521eeda9a79320dd8a6954ecc2c",
   "key":1429904419591, // timestamp as key
   "value":null
  }]
}
确保
doc.TimeStamp
是一个数字(可能您必须执行
parseInt(doc.TimeStamp)
)和更大的数值,然后才
TimeStamp-30000

关于代码行的两个词
emit(doc.\u id,doc)

  • doc.\u id
    作为键发出意味着您可能不需要该视图。只需通过
    GET/databasename/:id
    请求文档即可。另外,在多部分键中包含
    doc.\u id
    或视图行的值通常是不必要的,因为它作为附加属性自动包含在每一行中。一个有效的原因是,当您希望根据文档ID对视图进行排序时
  • 出于视图的性能原因,不建议将
    doc
    作为值发出。当您请求查看时,只需添加
    ?include_docs=true
    ,每一行都会有一个附加属性
    doc
    ,其中包含整个文档
    仅当特定文档更新时,才会刷新视图行。但是您可以为该结果请求视图:将doc.TimeStamp作为键发出,并使用?startkey=TimeStamp请求视图,其中TimeStamp的值为now.getTime()-30000。

    您能提供一个示例吗?我将添加不起作用的代码。它正在缓存编译视图时的值。感谢提供更多详细信息。你运行过这个代码吗?我只是尝试了一下,得到了与我相同的结果,无论刷新多少次,时间戳值都是相同的。是否有需要设置的配置?我还尝试了两种不同的浏览器,所以这不是浏览器缓存问题。关于排放(文件编号,文件编号);这只是一个快速的方式来显示我的问题。我提取了一些字段,这更容易键入。啊。现在我理解了您的期望:您希望接收时间戳不早于
    Now.getTime()-30000的所有行。是的,可以这样做吗?我已经测试了now.getTime()在reduce函数中的工作情况(根据它的工作原理,这有点道理)。试图找出正确的函数来消除具有太旧时间戳的键,只有在更新特定文档时才会刷新视图行。但是您可以请求该结果的视图:将
    doc.TimeStamp
    作为键发出,并使用
    ?startkey=TimeStamp
    请求视图,其中
    TimeStamp
    now.getTime()-30000
    的值。我认为答案确实是“Date()”是一次性的。因此,在视图的映射函数中,它在调用映射时被调用,在视图的索引过程中。我认为recude()函数也是如此,所以答案可能是否定的,Date()不能使用,除非我们同意它是一次性的。我的初衷是获取更新时间超过30秒的文档(例如)。我使用了startKey机制,通过emit(doc.TimeStamp,doc.usefulField)实现了这一点;现在时间戳是关键,可以按顺序查询。