【问题标题】:CouchDB reducing sums with date filterCouchDB 使用日期过滤器减少总和
【发布时间】:2015-11-28 23:49:11
【问题描述】:

总的来说,我对 couchdb 和 map/reduce 还是很陌生。我有以下看法:

{
  "_id": "_design/keys",
  "views": {
    "keys": {
      "map": "function(doc) { for (var thing in doc) { if (doc.created_at != null) { emit([thing, doc.created_at],1); } } }",
      "reduce": "function(key,values) { return sum(values); }"
    }
  }        
}

这可以很好地给我数据库中具有适当 group_level 的所有文档键的计数的总和:

.../_design/keys/_view/keys?group_level=1

{"rows":[
  {"key":["_id"],"value":2},
  {"key":["_rev"],"value":2},
  {"key":["created_at"],"value":2},
  {"key":["testing"],"value":2}
 ]}

现在我要做的是按日期减少这些映射的文档,这是一个 IOS8601 字符串:

  {"rows":[
    {"key":["_id","2015-11-25T21:13:58Z"],"value":1},
    {"key":["_id","2015-11-25T21:14:39Z"],"value":1},
    {"key":["_rev","2015-11-25T21:13:58Z"],"value":1},
    {"key":["_rev","2015-11-25T21:14:39Z"],"value":1},
    {"key":["created_at","2015-11-25T21:13:58Z"],"value":1},
    {"key":["created_at","2015-11-25T21:14:39Z"],"value":1},
    {"key":["testing","2015-11-25T21:13:58Z"],"value":1},
    {"key":["testing","2015-11-25T21:14:39Z"],"value":1}
  ]}

但我仍然希望按密钥的第一部分分组的结果。也就是说,我想指定2015-11-25T21:13:57Z的开始时间和2015-11-25T21:13:59Z的结束时间,并以2015-11-25T21:13:58Z的时间戳取回所有内容,如下所示:

{"rows":[
  {"key":["_id"],"value":1},
  {"key":["_rev"],"value":1},
  {"key":["created_at"],"value":1},
  {"key":["testing"],"value":1}
 ]}

我该怎么做?

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    您应该使用您的视图函数来发出时间戳的日期部分(正如您所注意到的,它方便地已经在分层结构中)作为一个复杂的键:

    代替“2015-11-26T...”,将密钥发出为 [2015, 11, 26, 21, 13, 58]

    然后您可以将复杂键的范围查询到不同级别(年、月、日期、时间)。请注意,如果您使用 Zulu 时间以外的时间,则可能需要使用 view 函数来读取 tz 并以 Zulu 时间发出,以便正确排序。

    请原谅从移动设备输入的拼写错误

    【讨论】:

    • 这太整洁了
    【解决方案2】:

    几天前我遇到了类似的问题,发现List Functions 是解决此问题的一种非常简单的方法。您可以简单地使用日期作为键,things 作为值,在列表函数中进行计数,并且仍然可以使用所有常规视图功能来定义开始键和结束键。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2021-07-05
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多