1

私は次の文書を持っています:

{
   "postId": "Message_2D73B43390041E868694A85A65E47A09D50F019C180E93BAACC454488F67A411_1375457942227",
   "userId": "User_2D73B43390041E868694A85A65E47A09D50F019C180E93BAACC454488F67A411",
   "post_message": "test",
   "attachments": {
       "images": [
       ],
       "audio": [
       ],
       "videos": [
       ]
    },
   "timestamp": 1375457942227,
    "followers": [
    ],
   "follow": 0,
   "reporters": [
   ],
   "report": 0,
   "rerayz": 0,
   "mtype": "post"
}

次のクエリを実行したいと思います。

SELECT * FROM posts WHERE users in ("User_1", "User_2", "User_3") ORDER_BY timestamp LIMIT 20

私は次のことを行い、複数の ?keys=["User_1", "User_2", etc] を渡しました。しかし、最初の 20 個だけを取得するために、タイムスタンプで並べ替えられた結果を取得するにはどうすればよいでしょうか?

function (doc, meta) {
  if(doc.mtype == "post") {
    emit(doc.userId, doc.post_message);
  }
}

助言がありますか?

ありがとう。

4

1 に答える 1

1

ここには 2 つの選択肢があります (他にもある可能性があります)。

  1. ユーザー ID の代わりにタイムスタンプを発行します。結果をループして、couchbase に依頼する代わりにコードを使用して、必要なユーザーを除外します。一致するレコードが 20 件になるまでループします。

  2. ユーザー ID に続いてタイムスタンプを出力できます。次に、各ユーザーを順番に検索し、最新の 20 件の投稿 (それぞれ) を取得します。これらをある種の配列または構造体に入れ、(コードを使用して) タイムスタンプで並べ替えます。配列の最初の 20 エントリ (ユーザーが 3 人の場合は 60 項目が含まれます) を取得すると、必要なものが得られます。

于 2013-08-07T18:40:07.090 に答える