Javascript CouchDB在时间戳内获取结果
Javascript CouchDB在时间戳内获取结果,javascript,database,mapreduce,couchdb,couchdb-futon,Javascript,Database,Mapreduce,Couchdb,Couchdb Futon,我们有一个很好的小CouchDB,为使用我们网站的用户存储一些用户习惯数据。 示例条目如下所示: { "_id": "5a2711671b321c6295acfe04700e3d32", "_rev": "1-a74c2d88a8277d9ad7ceb74406c9bb9e", "search_term": "dream_theater", "timestamp": 1447255047, "session_id": "qjrsh7cq10oa9m1mebdikdc
我们有一个很好的小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
}
"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) }"
}
"by_timestamp": {
"map": "function(doc) {\n emit(doc.timestamp, doc._id);\n}"
}
现在我编写了几个MapReduce函数来访问这个习惯数据并从中提取信息。一个例子如下所示:
{
"_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
}
"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) }"
}
"by_timestamp": {
"map": "function(doc) {\n emit(doc.timestamp, doc._id);\n}"
}
这会返回类似以下内容(group=true):
如您所见,每个习惯数据文档中都有一个时间戳字段。现在谈谈我的问题本身:
如何在给定的时间内收集数据。比如从1447255000纪元开始,到1447266000纪元结束。
组合键时,无法使用该组。
还有别的办法解决这个问题吗
提前非常感谢//Jonas您应该在视图中发出时间戳,如下所示:
{
"_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
}
"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) }"
}
"by_timestamp": {
"map": "function(doc) {\n emit(doc.timestamp, doc._id);\n}"
}
并且,要获取特定时间戳范围内的数据,请在查询中使用startkey
和endkey
属性。在浏览器中,你可以这样做,看看你是否得到了你想要的结果
http://127.0.0.1:5984/<DATABASE_NAME>/_design/<DESIGN_DOC_NAME>/_view/by_timestamp?startkey=1447255000&endkey=1447266000
http://127.0.0.1:5984//_design//_view/by_timestamp?startkey=1447255000&endkey=1447266000
让我知道这是否有帮助。您应该在视图中发出时间戳,如下所示:
{
"_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
}
"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) }"
}
"by_timestamp": {
"map": "function(doc) {\n emit(doc.timestamp, doc._id);\n}"
}
并且,要获取特定时间戳范围内的数据,请在查询中使用startkey
和endkey
属性。在浏览器中,你可以这样做,看看你是否得到了你想要的结果
http://127.0.0.1:5984/<DATABASE_NAME>/_design/<DESIGN_DOC_NAME>/_view/by_timestamp?startkey=1447255000&endkey=1447266000
http://127.0.0.1:5984//_design//_view/by_timestamp?startkey=1447255000&endkey=1447266000
让我知道这是否有用