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

我在这里看到两个选择(可能还有更多):

  1. 发出时间戳而不是用户 ID。循环遍历结果并使用代码过滤出您想要的用户,而不是让 couchbase 为您做这件事。循环直到有 20 条匹配记录。

  2. 您可以发出用户 ID 后跟时间戳。然后依次搜索每个用户,并获取他们最近的 20 个帖子(每个)。将它们放入某种数组或结构中,并按时间间隔对它们进行排序(使用代码)。获取数组中的前 20 个条目(如果您有 3 个用户,则包含 60 个项目),您就拥有了所需的内容。

于 2013-08-07T18:40:07.090 回答