【问题标题】:CouchDB get results within timestampCouchDB 在时间戳内获取结果
【发布时间】:2015-11-11 15:43:56
【问题描述】:


我们有一个不错的小 CouchDB 正在运行,为使用我们网站的人存储一些用户习惯数据。
示例条目如下所示:

{
   "_id": "5a2711671b321c6295acfe04700e3d32",
   "_rev": "1-a74c2d88a8277d9ad7ceb74406c9bb9e",
   "search_term": "dream_theater",
   "timestamp": 1447255047,
   "session_id": "qjrsh7cq10oa9m1mebdikdcvg3",
   "ip_address": "THE IP",
   "browser": "Safari",
   "browser_version": "9.0.1",
   "platform": "Macintosh",
   "service": [
   ],
   "content_type": [
   ],
   "language": "en",
   "limit": 100
}

现在我编写了几个 MapReduce 函数来访问这些习惯数据并从中提取信息。一个示例如下所示:

"by_platform_browser": {
           "map": "function(doc) { if (doc.browser && doc.platform)  emit([doc.platform, doc.browser], 1) }",
           "reduce": "function(keys, values, rereduce) { return sum(values) }"
       }

这会返回一些类似这样的内容(使用 group=true):

{"rows":[
{"key":["Linux","Chrome"],"value":198},
{"key":["Linux","Firefox"],"value":129},
{"key":["Macintosh","Chrome"],"value":36},
{"key":["Macintosh","Safari"],"value":135},
{"key":["Windows","Chrome"],"value":37}
]}

如您所见,每个习惯数据文档中都有一个时间戳字段。
现在我的问题本身:
我怎样才能在给定的时间内收集数据。就像从 1447255000 纪元开始到 1447266000 结束一样。
当我组合键时,我无法使用该组。
有没有其他方法可以解决这个问题?
非常感谢您! //乔纳斯

【问题讨论】:

    标签: javascript database mapreduce couchdb couchdb-futon


    【解决方案1】:

    您应该像这样在视图中发出时间戳:

    "by_timestamp": {
        "map": "function(doc) {\n  emit(doc.timestamp, doc._id);\n}"
    }
    

    而且,要获取特定时间戳范围之间的数据,请在查询中使用 startkeyendkey 属性。在浏览器中,您可以执行类似的操作,看看您是否获得了想要的结果。

    http://127.0.0.1:5984/<DATABASE_NAME>/_design/<DESIGN_DOC_NAME>/_view/by_timestamp?startkey=1447255000&endkey=1447266000
    

    如果这有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多