我正在使用cloudant数据库存储我的值,我指定了我的 文档ID为字符串+日期(ddmmyy)(例如foo071117)。最近我 需要过滤文件以显示过去7天内的文件 (例如foo311017到foo061117)并且我使用了视图来执行此操作。这是我的代码:
function (doc) {
var datearr = [];
var today = new Date()
for (var i =1; i<=7; i++){
var datesfull = new Date(today.getFullYear(), today.getMonth(), today.getDate() - i);
var dd = datesfull.getDate();
if (dd<10){
dd = '0'+dd;
}
var mm = datesfull.getMonth()+1;
if (mm<10){
mm ='0'+mm
}
var yy = datesfull.getFullYear().toString().substr(-2);
var dates = "foo" + dd + mm + yy;
datearr.push(dates);
}
if((datearr.indexOf(doc._id.slice(0,-1))>=0) || (datearr.indexOf(doc._id)>=0)){
emit(doc._id,doc);
}
}
切片用于当我的json文件太大而我必须将文件拆分成多个文件时(例如foo0711170,foo0711171)
此代码在运行之后起作用,cloudant视图仅显示了我想要的7个文档。但是,随着时间的推移,旧文件仍然没有只有7个文件。是否应该刷新Cloudant以在我的代码中指定的视图中显示7个文档,或者这是由于数据的存储方式?
*我无法使用URL查询过去7天的数据,因为我使用的是powerBI,这限制了我编写代码的能力,以指定要提取的文档ID,因此我只能将视图用作过滤器
答案 0 :(得分:3)
当您使用索引定义向Cloudant提供设计文档时,视图将构建并存储在磁盘上。然后,您可以稍后查询该视图以获得其结果。
在您的设计文档中,您正在获得&#34; now&#34;的时间,在这种情况下是执行索引的时间 - 而不是执行查询的时间。因此,它不能用于在过去7天内提取数据&#34; (查询时间)。
一种解决方案是改变文档_id
的构建方式。如果您使用了:yyyymmdd+string
,那么您的文档将按日期顺序存储,因为Cloudant在_id
字段上有一个主索引。
然后,您可以查询数据库的主索引,从过去7天的密钥开始,例如:
/mydb/_all_docs?startkey=20171101&include_docs=true