Dil*_*han 8 javascript couchdb couchrest
在couchdb中,我需要按键过滤,这样就完成了.
{
"_id": "_design/test",
"_rev": "6-cef7048c4fadf0daa67005fefe",
"language": "javascript",
"views": {
"all": {
"map": "function(doc) { if (doc.blogId) {emit(doc.key, doc);} }"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,结果应该由另一个键(doc.anotherkey)排序.因此,使用相同的功能如何通过另一个键实现过滤和排序.
谢谢
如果您只需要单一查询key,则可以使用以下地图:
function (doc) {
if (doc.blogId) {
emit([doc.key, doc.anotherkey], 1);
}
}
Run Code Online (Sandbox Code Playgroud)
和查询"KEY"与?startkey=["KEY"]&endkey=["KEY",{}]&include_docs=true.
["KEY"]比任何一个值较小["KEY","OTHER"]的值(因为较长的阵列及其前缀后排序)比任何,但大于["KEY2","OTHER"]用"KEY2" < "KEY";["KEY",{}]是一个值大于任何更大["KEY","OTHER"]值时,如果doc.otherkey是从未JSON对象(因为JSON对象谈到任何其他JSON值之后),但比任何较小的["KEY2","OTHER"]带"KEY2" > "KEY".当然,这不仅限于字符串.只要整理正确,任何类型的值都可以使用.
请记住对startkey和中的值进行URL编码endkey.例如,使用curl并假设您的数据库是"DB":
curl 'http://localhost:5984/DB/_design/test/_view/all?startkey=%5B%22KEY%22%5D&endkey=%5B%22KEY%22,%7B%7D%5D&include_docs=true'
Run Code Online (Sandbox Code Playgroud)
请注意,我使用了include_docs查询参数,而不是发出整个文档emit(..., doc),以节省磁盘空间.查询参数记录在CouchDB文档中.
要以降序排序结果,使用descending=true的查询参数和交换的价值startkey,并endkey为在明确的指导书中记载.
curl 'http://localhost:5984/DB/_design/test/_view/all?endkey=%5B%22KEY%22%5D&startkey=%5B%22KEY%22,%7B%7D%5D&include_docs=true&descending=true'
Run Code Online (Sandbox Code Playgroud)