如果只需要单查询key
,可以使用如下map:
function (doc) {
if (doc.blogId) {
emit([doc.key, doc.anotherkey], 1);
}
}
并查询"KEY"
with ?startkey=["KEY"]&endkey=["KEY",{}]&include_docs=true
。
在这里,根据CouchDB 的排序规则:
["KEY"]
是一个小于任何["KEY","OTHER"]
值的值(因为较长的数组在其前缀之后排序),但大于任何["KEY2","OTHER"]
带有"KEY2" < "KEY"
;
- and
["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'
请注意,我使用了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'