通过二级索引和排序结果查询couchbase视图

时间:2015-07-13 12:55:49

标签: couchbase couchbase-view

我的文件中有文件:

{ type: "post", author: "1", subject: "s1", timestamp: 11}
{ type: "post", author: "1", subject: "s2", timestamp: 12}
{ type: "post", author: "2", subject: "s3", timestamp: 9 }
{ type: "post", author: "3", subject: "s4", timestamp: 10}
{ type: "post", author: "4", subject: "s5", timestamp: 14}
{ type: "post", author: "5", subject: "s6", timestamp: 11}

我有意见:

function(doc, meta) { 
   if(doc.t === 'post') { 
     emit([doc.timestamp, doc.author]);  
   } 
} 
它给了我:

[11, "1"]
[12, "1"]
[9,  "2"]
[10, "3"]
[14, "4"]
[11, "5"]

我想选择按时间戳排序的特定用户[" 2"," 3"," 5"]的帖子。 我的意思是"获得一些用户的最新帖子"。 有可能吗?

2 个答案:

答案 0 :(得分:0)

我会重新整理您的数据: 假设您的作者是唯一的,请为每位作者保留一份文档,并将其帖子保存为该文档中的列表。

doc name: "author:1"
doc: 
{ 'posts':[{'subject':'s1','body':'this is body1'},
           {'subject':'s2','body':'this is body2'}] }

诀窍是维护帖子列表中的顺序。如果您只想要最新的帖子,您的视图可以提取帖子列表中的最后一项。

答案 1 :(得分:0)

查看关键数组处理其(自然)顺序。 如果你想"具体" user:比如说,具有时间戳的完全匹配的用户,视图函数看起来像:

function(doc, meta) {
    if(doc.type === 'post') { 
        emit([doc.author, doc.timestamp], null);
    }
}

这个确切的作者1,时间戳范围1~100
startkey:[1,1]
结束键:[1,100]

<强>结果:
[1,11]
[1,12]

但是,如果你想要两个带范围的属性......

作者:1~10
时间戳:1~100

随后排出&#39; ARRAY&#39;订购;超出范围查询的2个属性将无法按所需方式返回 如果你想要另一种带有多个&#34;范围的排序结果&#34;属性,你应该包含视图功能。