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 “它似乎不起作用”是一个狡猾的评论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-
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;
颜色:黑色;
背景:浅灰色;
}
请不要链接到外部图像。随着时间的推移,这些图像可能会被破坏,更重要的是,它们会成为视觉障碍患者的障碍。