有没有办法让数据库中的文件到期?

时间:2015-11-10 16:38:23

标签: cloudant

我收到了客户要求清理应用程序的所有文档,这些文档来自cloudant上超过30天的特定视图。我对cloudant文档进行了一些搜索,但找不到任何此类功能来设置文档的到期日期。在线搜索产生了一个非常相似的查询,但没有答案。有谁知道最好的方法是什么?请告诉我。 设置类似日常调度程序的东西要简单得多,而不是为它编写新程序。

1 个答案:

答案 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的较新文档。正如我之前提到的,您可能还想在索引中添加其他字段,然后查询这些字段。