Java Couchbase-基于TTL删除旧文档

Java Couchbase-基于TTL删除旧文档,java,couchbase,couchbase-java-api,Java,Couchbase,Couchbase Java Api,我有一个沙发桶,里面有很多文件。经过一段时间,我发现这些文档正在迅速占用大量存储空间。我现在正在为将要存储的所有新文档设置TTL。是否有办法为所有现有文档设置TTL或根据到期时间删除现有文档?不同的文件根据文件类型有不同的到期时间(从15分钟到1个月不等)。你能推荐一种我可以使用的方法吗?你可以设置文档的到期日,然后更新该文档。当然,你必须检查所有的文件,并设置每个文件的有效期 我不知道如何在Java中实现这一点,但它可能类似于.NET: // get the document into a v

我有一个沙发桶,里面有很多文件。经过一段时间,我发现这些文档正在迅速占用大量存储空间。我现在正在为将要存储的所有新文档设置TTL。是否有办法为所有现有文档设置TTL或根据到期时间删除现有文档?不同的文件根据文件类型有不同的到期时间(从15分钟到1个月不等)。你能推荐一种我可以使用的方法吗?

你可以设置文档的到期日,然后更新该文档。当然,你必须检查所有的文件,并设置每个文件的有效期

我不知道如何在Java中实现这一点,但它可能类似于.NET:

// get the document into a variable named 'doc', then
doc.Expiry = 123;
_bucket.Update(doc);
如果您只有一些著名的文档,那么这应该很容易

您还可以使用N1QL查询根据到期时间检索文档,但要点是这样一个问题:

SELECT META(default).id, *
FROM default 
WHERE DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(DATE_ADD_MILLIS(NOW_MILLIS(),30,"second")),"second") < 30 
  AND STR_TO_UTC(exp_datetime) IS NOT MISSING;
选择元(默认).id*
默认
其中日期差(STR_至UTC(exp_datetime),MILLIS_至UTC(DATE_ADD_MILLIS(现在是MILLIS(),30,“秒”),“秒”)<30
STR_TO_UTC(exp_datetime)不丢失;
它将选择将在30秒内过期的文档。因此,您可以编写一个使用
WHERE
子句的N1QL
DELETE
查询


更新:Couchbase的一位同事指给我看。您还不能使用N1QL更新设置到期日。但正如我上面所说,您可以根据到期日选择/删除文档。

Thnaks@mgroves。我假设如果我必须为所有这些文档设置TTL,我需要创建视图来获取文档并为所有文档设置TTL。我使用的是3.X,它不支持N1QL查询。有更简单的方法吗?在3.x中,这将是最简单/推荐的方法。