CouchDB 在 reduce 函数中过滤时间戳 - 某种 Date.now?

CouchDB filter timestamps in a reduce function - some sort of Date.now?

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

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

是的。 var now = new Date() 应该可以。

条件必须导致 false。您可以使用视图进行测试:

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._id, doc);:

  1. doc._id 作为键发出意味着您可能不需要该视图。只需通过 GET /databasename/:id 请求文档即可。此外,在多部分键或视图行的值中包含 doc._id 几乎没有必要,因为它会自动作为附加 属性 包含在每一行中。一个正当理由是当您想要根据文档 ID 对视图进行排序时。
  2. 出于视图的性能原因,不建议发出 doc 作为值。请求视图时只需添加 ?include_docs=true,每一行都会有一个额外的 属性 doc,其中包含整个文档。

仅当特定文档更新时才会刷新视图行。但是您可以请求该结果的视图:发出 doc.TimeStamp 作为键并使用 ?startkey=timestamp 请求视图,其中时间戳是 now.getTime() - 30000.

的值