0

私は以下の書類を持っています

{
  "_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データベースでは、2つのクエリを実行limit 2して結果をマージできました。

4

2 に答える 2

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" }

最も多く表示されたレコードのみを取得したい場合は、スライス メソッドを使用できます。

var a = [...];
a.sort(...);

a = a.slice(0, 2);
于 2012-11-06T10:20:20.743 に答える
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ますが、作成者文字列の順序も逆になります。これは文字列の自然な順序ではなく、将来必要になる可能性があります;)

于 2012-11-06T11:09:00.060 に答える