我收到了客户要求清理应用程序的所有文档,这些文档来自cloudant上超过30天的特定视图。我对cloudant文档进行了一些搜索,但找不到任何此类功能来设置文档的到期日期。在线搜索产生了一个非常相似的查询,但没有答案。有谁知道最好的方法是什么?请告诉我。 设置类似日常调度程序的东西要简单得多,而不是为它编写新程序。
答案 0 :(得分:1)
假设当前日期为2015-11-10T17:44:31+00:00
(采用ISO 8601格式)。您的文档的时间戳为2015-10-10T17:44:31.000Z
:
{
"_id": "791bb0b8ff1d8f2be5dd15893ca4a85f",
"_rev": "1-b1007c119c53fccb69fae396028d16e1",
"timestamp": "2015-10-10T17:44:31.000Z"
}
另一个时间戳为2015-10-12T17:44:31.000Z
的文档:
{
"_id": "791bb0b8ff1d8f2be5dd15893cbe6e2b",
"_rev": "1-d068d8b63ca848406082f31e4b20e927",
"timestamp": "2015-10-12T17:44:31.000Z"
}
您想要查询不超过30天的文档,其中包括第二个文档但不包括第一个文档。在timestamp
字段上创建索引(在您的应用程序中,您可能会在索引中添加其他字段,以便您可以将这些字段添加到查询中):
{
"index": {
"fields": [
"timestamp"
]
},
"type": "json"
}
计算30天前的ISO 8601时间戳。在JavaScript中:
var currentTime = new Date("2015-11-10T17:44:31+00:00");
var thirtyDaysAgo = new Date(currentTime.getTime() - (30 * 24 * 3600 * 1000));
console.log(thirtyDaysAgo.toISOString());
这应该为您提供2015-10-11T17:44:31.000Z
的时间戳。然后让我们查询时间戳大于或等于此时间的文档:
{
"selector": {
"timestamp": {
"$gte": "2015-10-11T17:44:31.000Z"
}
}
}
此查询仅返回时间戳为2015-10-12T17:44:31.000Z
的较新文档。正如我之前提到的,您可能还想在索引中添加其他字段,然后查询这些字段。