获取使用特定字段值创建的最新文档(按时间戳)的正确方法?

Proper way to get the latest doc (by timestamp) created with a specific field value?

我仍在学习 cloudant,需要一点帮助来确定使用什么工具来获取具有特定字段值的最新文档(基于文档中的时间戳)。

我已通读视图文档并了解我可以创建一个视图,其键是一个包含数据 ["field-value"、"timestamp"] 的数组?然后在查询时,按降序键查询并将文档限制为 1?或者有更好的方法吗?我将使用分区数据库。

使用键查询文档时的示例数据:"k1":

   {
     "id": "55e9fd410b0df870409e0d92bf6a8318",
     "key": "k1",
     "time": "2019-08-06T19:11:16.556Z"
   },
   {
     "id": "77a3ba0b77f1c740f68bac46a2a307ee",
     "key": "k1",
     "time": "2019-08-06T19:11:16.539Z"
   }

期望的输出:

{
     "id": "55e9fd410b0df870409e0d92bf6a8318",
     "key": "k1",
     "time": "2019-08-06T19:11:16.556Z"
}

您可以通过多种方式实现这一目标。最灵活的方法是创建一个视图,该视图发出一个向量值键,其中包含键和 yyyy、mm、dd 或您关心的时间戳中的任何位:

function (doc) {
  var d = new Date(doc.timestamp);
  emit([
    doc.product_id,
    d.getFullYear(), 
    d.getMonth()+1, 
    d.getDate()], null);
  }
}

减少说 _count 你也可以随着时间的推移进行聚合。这种方法在 Mike Miller 的旧 blog post 中有很好的描述。

如果您不关心聚合,您可以只发出纪元秒作为键,或者构造时间可排序的 ID,正如 Glynn Bird 在另一个 Cloudant blog post 中所建议的那样。