【问题标题】:Filtering document ID using views?使用视图过滤文档 ID?
【发布时间】:2017-11-07 08:08:13
【问题描述】:

我正在使用 cloudant 数据库来存储我的值并指定我的 文档 ID 为 string+date(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 的能力,因此我只能使用视图作为过滤器

【问题讨论】:

    标签: javascript cloudant


    【解决方案1】:

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

    在您的设计文档中,您得到的是“现在”的时间,在这种情况下是执行索引的时间,而不是执行查询的时间。因此,它不能用于提取“过去 7 天”(查询时间)的数据。

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

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

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

    【讨论】:

    • 感谢您的建议!帮我收拾东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2014-12-11
    相关资源
    最近更新 更多