使用视图过滤文档ID?

时间:2017-11-07 08:08:13

标签: javascript cloudant

我正在使用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,因此我只能将视图用作过滤器

1 个答案:

答案 0 :(得分:3)

当您使用索引定义向Cloudant提供设计文档时,视图将构建并存储在磁盘上。然后,您可以稍后查询该视图以获得其结果。

在您的设计文档中,您正在获得&#34; now&#34;的时间,在这种情况下是执行索引的时间 - 而不是执行查询的时间。因此,它不能用于在过去7天内提取数据&#34; (查询时间)。

一种解决方案是改变文档_id的构建方式。如果您使用了:yyyymmdd+string,那么您的文档将按日期顺序存储,因为Cloudant在_id字段上有一个主索引。

然后,您可以查询数据库的主索引,从过去7天的密钥开始,例如:

/mydb/_all_docs?startkey=20171101&include_docs=true