我有以下文件:
{
"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);
}
}
有什么建议吗?
感谢。
答案 0 :(得分:1)
我在这里看到两个选择(可能更多):
发出时间戳而不是用户ID。循环遍历结果并使用代码过滤掉您想要的用户,而不是让couchbase为您完成。循环直到你有20个匹配的记录。
您可以发出用户ID,后跟时间戳。然后依次搜索每个用户并获取他们最近的20个帖子(每个)。将它们放在某种数组或结构中,并按时间顺序对它们(使用代码)进行排序。获取阵列中的前20个条目(如果您有3个用户,则包含60个项目)并且您拥有所需的条目。