从cloudant查询获取最新(时间戳明智)值

时间:2015-11-20 18:46:20

标签: cloudant

我有一个cloudant DB,每个文档都是这样的:

{
  "_id": "2015-11-20_attr_00",
  "key": "attr",
  "value": "00",
  "employeeCount": 12,
  "timestamp": "2015-11-20T18:16:05.366Z",
  "epocTimestampMillis": 1448043365366,
  "docType": "attrCounts"
}

对于给定的属性,有一个员工计数。正如您所看到的,我每天都有相同属性的记录。我正在尝试创建一个视图或索引,它将为我提供此属性的最新记录。这意味着如果我在2015-10-30和2015-11-10中添加了一条记录,那么返回给我的记录只是2015-11-10时间戳记录的员工数量。

我试过了视图,但我得到的每个属性的所有条目不仅仅是最新的。我没有看索引,因为我认为它们没有预先计算。我将从客户端查询此信息,因此预先计算(如视图)非常重要。

任何指导都将非常感谢。谢谢

2 个答案:

答案 0 :(得分:7)

  1. 我在这里创建了一个测试数据库。只需确保在将JSON文档插入Cloudant(或CouchDB)时,您的时间戳不是字符串而是JavaScript数据对象:

    https://examples.cloudant.com/latestdocs/_all_docs?include_docs=true

  2. 我构建了一个这样的搜索索引(命名设计文档"摘要"以及搜索索引"最新"): function (doc) { if ( doc.docType == "totalEmployeeCounts" && doc.key == "div") { index("division", doc.value, {"store": true}); index("timestamp", doc.timestamp, {"store": true}); } }

  3. 然后,这里的查询只会返回每个部门的最新记录。请注意,限制值将适用于每个组,因此在limit = 1的情况下,如果有4个组,则将获得4个文档而不是1个。

    https://examples.cloudant.com/latestdocs/_design/summary/_search/latest?q=*:*&limit=1&group_field=division&include_docs=true&sort_field=-timestamp

答案 1 :(得分:0)

不建议将TimeStamp索引为字符串。

参考: https://cloudant.com/blog/defensive-coding-in-mapindex-functions/#.VvRVxtIrJaT

我有同样的问题。我将timestamp值转换为毫秒(数字),然后将该值编入索引。

var millis= Date.parse(timestamp);

index("millis",millis,{"store": false}); 

您可以使用与Raj建议相同的查询,但使用' millis'字段而不是时间戳。