当你想对日期信息做一个范围查询时,我发现你的地图函数发出一个问题,将你的_id作为关键字。您应该将日期信息保存在单独的字段中。 _id必须是一个字符串,并且您将无法正确执行startkey-endkey查询。
喜欢的东西:
{
"_id": "997b9f758899f102ab58570686001bc2",
"_rev": "1-f87d54608d36cd2e28add67e88e416a4",
"date": [2011, 6, 7, 10, 55],
"volt": 107,
"ampere": 23.5
}
然后你的设计文件将变成类似:
{
"_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将为一年,2个月等的总计。最重要的是,您可以使用startkey和endkey进行过滤。
GET db/_design/power/_view/watt?group_level=2
应该给你回类似于:
{"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]
{"rows":[
{"key":null,"value":3977.0}
]}
减少和过滤掉你不想让几个月前的值将它们组合到两个分组。
GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]&group_level=2
{"rows":[
{"key":[2011,4],"value":1988.5},
{"key":[2011,5],"value":1988.5}
]}
反正只是想彻底...也帮助我记住这些东西。
CouchDB HTTP View API - Query Options
编辑:
我注意到你提到的按小时想组吧。您将继续将分组级别降低至密钥的小时部分。
GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]&group_level=4
{"rows":[
{"key":[2011,4,9,11],"value":1988.5},
{"key":[2011,5,9,11],"value":1988.5}
]}
我怕我的测试数据库没有非常有用的信息,但我希望我如何显示startkey/endkey和group_level可以使用。
请包括示例文档和您的地图功能源 – 2011-06-09 15:25:16