使用视图过滤文档 ID?
Filtering document ID using views?
我正在使用 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 的能力,因此我只能将视图用作一个过滤器
当您向 Cloudant 提供带有索引定义的设计文档时,将构建视图并将其存储在磁盘上。然后您可以稍后查询该视图以获取其结果。
在您的设计文档中,您得到的时间是 "now",在本例中是执行索引的时间 - 而不是执行查询的时间。因此它不能用于提取数据 "in the last 7 days"(查询时间)。
一种解决方案是更改文档 _id
的构建方式。如果您使用:yyyymmdd+string
,那么您的文档将按日期顺序存储,因为 Cloudant 在 _id
字段上有一个主索引。
然后您可以查询数据库的主索引,从过去 7 天的键开始,例如:
/mydb/_all_docs?startkey=20171101&include_docs=true
我正在使用 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 的能力,因此我只能将视图用作一个过滤器
当您向 Cloudant 提供带有索引定义的设计文档时,将构建视图并将其存储在磁盘上。然后您可以稍后查询该视图以获取其结果。
在您的设计文档中,您得到的时间是 "now",在本例中是执行索引的时间 - 而不是执行查询的时间。因此它不能用于提取数据 "in the last 7 days"(查询时间)。
一种解决方案是更改文档 _id
的构建方式。如果您使用:yyyymmdd+string
,那么您的文档将按日期顺序存储,因为 Cloudant 在 _id
字段上有一个主索引。
然后您可以查询数据库的主索引,从过去 7 天的键开始,例如:
/mydb/_all_docs?startkey=20171101&include_docs=true