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);
:
- 将
doc._id
作为键发出意味着您可能不需要该视图。只需通过 GET /databasename/:id
请求文档即可。此外,在多部分键或视图行的值中包含 doc._id
几乎没有必要,因为它会自动作为附加 属性 包含在每一行中。一个正当理由是当您想要根据文档 ID 对视图进行排序时。
- 出于视图的性能原因,不建议发出
doc
作为值。请求视图时只需添加 ?include_docs=true
,每一行都会有一个额外的 属性 doc
,其中包含整个文档。
仅当特定文档更新时才会刷新视图行。但是您可以请求该结果的视图:发出 doc.TimeStamp 作为键并使用 ?startkey=timestamp 请求视图,其中时间戳是 now.getTime() - 30000.
的值
可以在 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);
:
- 将
doc._id
作为键发出意味着您可能不需要该视图。只需通过GET /databasename/:id
请求文档即可。此外,在多部分键或视图行的值中包含doc._id
几乎没有必要,因为它会自动作为附加 属性 包含在每一行中。一个正当理由是当您想要根据文档 ID 对视图进行排序时。 - 出于视图的性能原因,不建议发出
doc
作为值。请求视图时只需添加?include_docs=true
,每一行都会有一个额外的 属性doc
,其中包含整个文档。
仅当特定文档更新时才会刷新视图行。但是您可以请求该结果的视图:发出 doc.TimeStamp 作为键并使用 ?startkey=timestamp 请求视图,其中时间戳是 now.getTime() - 30000.
的值