对Couchbase的简单SQL查询

时间:2013-08-07 15:32:57

标签: couchbase

我有以下文件:

{
   "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”等]。但是,我怎样才能将结果按时间戳排序,以便只获得20个?

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

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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