是否可以删除apachecouchdb';什么是暂时的看法?

是否可以删除apachecouchdb';什么是暂时的看法?,couchdb,Couchdb,我的数据库中的所有文档都有时间戳: 示例文件: { ... "timestamp": 1404587326, ... } 使用map reduce,我可以过滤所有早于某个日期的文档,例如早于昨天的文档,但如何删除那些早于昨天的文档 function(doc) { var yesterday = Date.now() - (60*60*24); if(doc.timestamp < yesterday) { delete(doc._i

我的数据库中的所有文档都有时间戳:

示例文件:

{
    ...
    "timestamp": 1404587326,
    ...
}
使用map reduce,我可以过滤所有早于某个日期的文档,例如早于昨天的文档,但如何删除那些早于昨天的文档

function(doc) {
    var yesterday = Date.now() - (60*60*24);
    if(doc.timestamp < yesterday) {
        delete(doc._id); // how??
    }
}
功能(doc){
var昨天=日期。现在()-(60*60*24);
如果(文件时间戳<昨天){
删除(doc._id);//如何删除??
}
}

首先,您的map reduce代码不起作用

仅当文档正在更改时,才会调用map函数。因此,
Date.now()
函数将是文档更改后第一次调用map函数的日期,而不是访问函数生成的索引的实际时间

另外,我不知道您可以在视图中删除文档

这就是你如何实现它的方法

在映射函数中将日期用作ID,并返回文档的ID。 然后使用客户端应用程序调用带有
startkey
参数的视图,您可以将该参数设置为
Date.now()-24*60*60

然后,视图将只返回比
startkey
更新的文档,但不会删除任何文档

您的映射函数将类似于:

function(doc){
  emit(doc.timestamp, doc);
}
您真的需要删除文档吗?

如果您确实希望删除超过2天的文档,则可能没有使用couchdb的最佳数据库。Couchbase——据我所知,它在某些方面类似于couchdb和MongoDB都提供文档到期选项

或者,您可以偶尔使用上述映射功能访问文档。但是使用endkey,以便检索所有旧文档。然后您需要逐个删除它们

最终临时视图


我不知道为什么要使用其中一个,只需存储视图即可

您可以使用给定的@dashservice的视图方法,然后发出一个HTTP DELETE/db/docname,或者使用_bulk_docs API端点(如果有很多)


一种常见的couchdb设计模式是将文档存储到单独的数据库中,当不需要这些文档时,可以随后删除这些文档

有趣而清晰的答案,谢谢。我真的不需要经常删除文档,我可能需要每年删除一次或两次,以删除旧文档(大多数情况下都超过一天)。最好不要
发出(…,doc)
——这会将文档的完整副本嵌入到视图中,在大多数情况下,查询性能不需要这样做,此外,它还复制了数据库本身已有的功能。一个简单的
emit(doc.timestamp)
就足够了。