Javascript 按日期排序并在CouchDB视图中获取最新值

Javascript 按日期排序并在CouchDB视图中获取最新值,javascript,couchdb,Javascript,Couchdb,我有id和时间戳不明显的文档。 例如,我有下面这样的东西 身份证件 时间戳 A. 2021-02-22T09:11:21.961Z B 2021-02-22T09:11:21.961Z C 2021-02-22T09:11:21.961Z A. 2021-02-22T19:21:11.861Z C 2021-02-22T19:21:11.861Z “它似乎不起作用”是一个狡猾的评论 startkey=[“2021-02-22T09:11:21.961Z”]&endkey=[%222021-02-

我有id和时间戳不明显的文档。 例如,我有下面这样的东西

身份证件 时间戳 A. 2021-02-22T09:11:21.961Z B 2021-02-22T09:11:21.961Z C 2021-02-22T09:11:21.961Z A. 2021-02-22T19:21:11.861Z C 2021-02-22T19:21:11.861Z “它似乎不起作用”是一个狡猾的评论

startkey=[“2021-02-22T09:11:21.961Z”]&endkey=[%222021-02-24T11:11:22.061Z%22,{}]&降序=true

应该返回一个空结果。为什么?

descending=true
与您的问题相关时,相关人员有关于
descending
参数的答案-您没有交换开始键和结束键:

…结果将为空,因为视图中的条目已反转 在应用密钥筛选器之前,因此endkey。。。 将在开始键之前看到。。。导致一个空的 名单

相反,您应该反转提供给startkey和 endkey参数,以匹配应用于键的降序排序

(强调矿山)

因此,当
descending=true
时,查询必须交换起始值和键值

下面是一个使用PockDB的演示。注意:当参数交换不正确时,数据库返回一条很好的错误消息

我选择使用这个map函数保持简单

function (doc) {             
  emit(doc.Timestamp,doc.Id);
}
因此,要专注于实际问题,而不是复制复杂的键排列,对于这个答案来说,这只是一种阻碍

异步函数showViewDocs(标题、elId、视图、参数){ //显示标题 gel(elId).innerHTML=标题; //显示参数 gel(elId+“_params”).innerText=“Parameters\n”+JSON.stringify(params,未定义,2); //显示结果 让文字; 试一试{ const result=await db.query(视图,参数); text=result.rows.map(row=>[row.value,row.key].join('\t')).join('\n'); }捕捉(错误){ text=JSON.stringify(错误,未定义,2); } 凝胶(elId+“\U结果”)。innerText=“\n结果:\n--------------------------------------\n”+文本; } 函数getDocsToInstall(){ 常量文档=[{ “Id”:“a”, “时间戳”:“2021-02-22T09:11:21.961Z”, }, { “Id”:“b”, “时间戳”:“2021-02-22T09:11:21.961Z”, }, { “Id”:“c”, “时间戳”:“2021-02-22T09:11:21.961Z”, }, { “Id”:“a”, “时间戳”:“2021-02-22T19:21:11.861Z”, }, { “Id”:“c”, “时间戳”:“2021-02-22T19:21:11.861Z”, } ]; //设计文件 常数ddoc={ “_id”:“_设计/SO-67215994”, “意见”:{ “时间戳\u id”:{ “映射”:`函数(doc){ 发出(文档时间戳、文档Id) }` } } }; 文档推送(ddoc); 退货单据; } const db=新邮袋db('SO-67215994'{ 适配器:“内存” }); //安装文档并以各种形式显示视图。 (异步()=>{ const viewName='SO-67215994/时间戳_id'; 等待db.bulkDocs(getDocsToInstall()); //显示到原始视图 设params={ 包含文档:false, 减少:错误 } 等待showViewDocs(“原始视图”、“视图”、“视图名”、“参数”); //降序=真;不交换开始/结束键(问题) 参数={ 包含文档:false, 减少:错, 是的, 开始键:“2021-02-22T00:00:00.000Z”, 结束键:“2021-02-22T11:59:59.999Z” } 等待showViewDocs(“问题:降序=真,开始/结束键未交换”,“日期\范围\ 1”,视图名称,参数); // //降序=真;交换开始/结束键。 // 参数={ 包含文档:false, 减少:错, 降序:true,//document.getElementById(id);
.title{
边缘顶部:2米;
填充:.33em;
颜色:黑色;
背景:浅灰色;
}

请不要链接到外部图像。随着时间的推移,这些图像可能会被破坏,更重要的是,它们会成为视觉障碍患者的障碍。