我有以下文件
{
"_id": "id",
"_rev": "123456",
"author": "john",
"views": "3",
},
{
"_id": "id",
"_rev": "123456",
"author": "jake",
"views": "5",
},
{
"_id": "id",
"_rev": "123456",
"author": "jake",
"views": "6",
},
{
"_id": "id",
"_rev": "123456",
"author": "john",
"views": "1",
},
{
"_id": "id",
"_rev": "123456",
"author": "jake",
"views": "7",
},
{
"_id": "id",
"_rev": "123456",
"author": "john",
"views": "10",
}
让我们假设这些是评论,我希望用户能够获得2条评论最多的评论。
我怎样才能在CouchDB中做到这一点?
在任何其他sql数据库中,我可以使用limit 2
执行2次查询,然后合并结果。
答案 0 :(得分:1)
如果您在JavaScript中有一个包含该数据的数组,则只需使用sort方法:
var a = [{...}, {...}, {...}];
a.sort(function(a, b) {
return b.views - a.views;
});
console.log(a[0]) //{ "_id": "id", "_rev": "123456", "author": "john", "views": "10" }
console.log(a[1]) //{ "_id": "id", "_rev": "123456", "author": "jake", "views": "7" }
如果您只想查看最常查看的记录,可以使用slice method
var a = [...];
a.sort(...);
a = a.slice(0, 2);
答案 1 :(得分:0)
我猜你可以使用这个map
:
function (doc) {
emit([doc.author, -doc.views], null);
}
没有减少。使用选项?startkey=['john']&limit=2
进行查询的结果应为:
{"total_rows":5,"offset":0,"rows":[
{"id":"id1","key":["john",-10],"value":null},
{"id":"id2","key":["john",-3],"value":null}
]}
在发出-
以获取最大观看次数时请注意doc.view
符号。您也可以使用descending=true
选项,但它也会颠倒作者字符串的顺序。这不是字符串的自然顺序,您将来可能需要它;)