View CouchDB查询日期

View CouchDB查询日期,view,couchdb,View,Couchdb,我正在CouchDB中收集温度,想查询房间、年、月、日、小时的平均温度。不幸的是,当我执行我的查询(见下文)时,我得到的是所有月份,而不仅仅是我在查询中指定的月份。但是,如果只指定一个房间,则只会得到查询中指定的月份。如何查询指定时段内的所有房间 映射功能: 功能(doc){ 如果(文件类型==“tempum”){ var d=新日期(单据日期时间); 用于(文档路径中的变量i) 发出([doc.path[i],d.getFullYear(),d.getMonth()+1,d.getDate(

我正在CouchDB中收集温度,想查询房间、年、月、日、小时的平均温度。不幸的是,当我执行我的查询(见下文)时,我得到的是所有月份,而不仅仅是我在查询中指定的月份。但是,如果只指定一个房间,则只会得到查询中指定的月份。如何查询指定时段内的所有房间

映射功能:

功能(doc){
如果(文件类型==“tempum”){
var d=新日期(单据日期时间);
用于(文档路径中的变量i)
发出([doc.path[i],d.getFullYear(),d.getMonth()+1,d.getDate(),d.getHours()],+doc.temp);
}

}
这是因为您不了解couchDB如何处理密钥。couchDB的键是列表中的一个位置(实际上是一棵树,但参数对于列表是相同的),因此当您说要从
[“A”,2015,9,1,0]开始时,
couchDB从列表中的该位置开始(如果您没有指定任何键,则得到的结果,然后从该点向前移动,直到它到达
[“z”处的结束键,2015,10,1,0]
.CouchDB从左到右匹配数组,因此对于所有foo,bar,
[“a”,foo]
始终位于
[“b”,bar]
之前

如果您希望能够筛选某个日期的结果,我建议您将函数更改为“emit”([d.getFullYear(),d.getMonth()+1,d.getDate(),d.getHours(),doc.path[I]],+doc.temp)

如果你想在房间中进行过滤,在其他时间为每个房间创建一个视图,那么couchDB中的视图非常便宜。
`

谢谢Petter!我会尝试一下。是的,很有效。我试图在一个视图中完成所有操作,但我喜欢您的视图便宜的概念!