首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用couchdb对日期范围内的视图的值进行求和?

如何使用couchdb对日期范围内的视图的值进行求和?
EN

Stack Overflow用户
提问于 2011-06-09 22:50:47
回答 2查看 1.4K关注 0票数 5

如果我有一个地图函数,发出一个时间戳作为键,一个数字作为文档,如何获得选择日期范围的值的总和?

编辑文档示例如下:

代码语言:javascript
复制
{
   "_id": "[2011, 6, 7, 10, 55]",
   "_rev": "1-f87d54608d36cd2e28add67e88e416a4",
   "volt": 107,
   "ampere": 23.5
}

视图是:

代码语言:javascript
复制
{
   "_id": "_design/power",
   "_rev": "1-7788287ab51c480c725498eba4f79ddb",
   "language": "javascript",
   "views": {
       "watt": {
           "map": "function(doc) {\n  emit(doc._id, doc.volt * doc.ampere);\n}"
       }
   }
}

我需要查询一下,例如:三月份的平均每小时。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-10 00:57:05

我发现当您想要对日期信息进行范围查询时,您的地图函数会发出_id作为键,这是一个问题。您应该将日期信息保存在单独的字段中。_id必须是一个字符串,您将无法正确地对其执行startkey-endkey查询。

类似于:

代码语言:javascript
复制
{
   "_id": "997b9f758899f102ab58570686001bc2",
   "_rev": "1-f87d54608d36cd2e28add67e88e416a4",
   "date": [2011, 6, 7, 10, 55],
   "volt": 107,
   "ampere": 23.5
}

然后你的设计文档就会变成类似这样的东西:

代码语言:javascript
复制
{
   "_id": "_design/power",
   "_rev": "1-7788287ab51c480c725498eba4f79ddb",
   "language": "javascript",
   "views": {
       "watt": {
           "map": "function(doc) {\n  emit(doc.date, doc.volt * doc.ampere);\n}",
           "reduce": "_sum"
       }
   }
}

您可以使用组级别来控制如何根据您的年、月、日、小时、分钟键返回信息。组级别1将是一年、两个月等的总计。在此基础上,您可以使用startkey和endkey对其进行筛选。

GET db/_design/power/_view/watt?group_level=2

应该会给你一些类似的东西:

代码语言:javascript
复制
{"rows":[
 {"key":[2011,4],"value":1988.5},
 {"key":[2011,5],"value":1988.5},
 {"key":[2011,6],"value":7778.0}
]}

删除分组并使用键范围进行过滤也可以获得所需的信息,但它看起来会有所不同。

GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]

代码语言:javascript
复制
{"rows":[
{"key":null,"value":3977.0}
]}

将它们组合在一起,以便在减少之前对值进行分组,并过滤掉您不需要的月份。

GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]&group_level=2

代码语言:javascript
复制
{"rows":[
{"key":[2011,4],"value":1988.5},
{"key":[2011,5],"value":1988.5}
]}

无论如何,试着成为thorough...also就能帮我记住这些东西。

CouchDB HTTP View API - Query Options

编辑:

我注意到你提到想要按小时分组。您将继续将分组级别向下扩展到键的小时部分。

GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]&group_level=4

代码语言:javascript
复制
{"rows":[
{"key":[2011,4,9,11],"value":1988.5},
{"key":[2011,5,9,11],"value":1988.5}
]}

我担心我的测试数据库没有非常有用的信息,但我希望我能展示如何使用startkey/endkey和group_level。

票数 6
EN

Stack Overflow用户

发布于 2011-06-10 00:25:24

您可以将内置的_sum用作reduce

代码语言:javascript
复制
"reduce":"_sum"

然后,您需要使用适当的组级别以及startkeyendkey来查询视图

代码语言:javascript
复制
GET db/_design/power/_view/watt?group_level=2&startkey=[2011,3]&endky=[2011,4]&inclusive_end=false

这给出了三月份的总和。格式化

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6294794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档