这是你需要做的。
地图功能
function(doc)
{
if (doc.category)
{
emit(['category', doc.category], doc.modified);
}
}
那么你需要一个列表函数来对它们进行分组,你可能会滥用reduce并这样做,但它可能会因为大量数据的减少速度不够快而引发错误。
function(head, req)
{
% this sort function assumes that modifed is a number
% and it sorts in descending order
function sortCategory(a,b) { b.value - a.value; }
var categories = {};
var category;
var id;
var row;
while (row = getRow())
{
if (!categories[row.key[0]])
{
categories[row.key[0]] = [];
}
categories[row.key[0]].push(row);
}
for (var cat in categories)
{
categories[cat].sort(sortCategory);
categories[cat] = categories[cat].slice(0,10);
}
send(toJSON(categories));
}
您现在可以获得所有类别的前 10 名
http://localhost:5984/database/_design/doc/_list/top_ten/by_categories
获取文档
http://localhost:5984/database/_design/doc/_list/top_ten/by_categories?include_docs=true
现在您可以使用多范围 POST 查询此内容并限制哪些类别
curl -X POST http://localhost:5984/database/_design/doc/_list/top_ten/by_categories -d '{"keys":[["category1"],["category2",["category3"]]}'
您也不能硬编码10 并通过req 变量传递数字。
这里有更多视图/列表trickery。