1

我的存储桶中有文件:

{ 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"] 的帖子。我的意思是“获取一些用户的最新帖子”。有可能吗?

4

2 回答 2

0

我会重新组织您的数据:假设您的作者是独一无二的,请为每个作者保留一份文档,并将他们的帖子保存为该文档中的列表。

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

诀窍是在帖子列表中保持顺序。如果您只想要最新的帖子,您的视图可以拉出帖子列表中的最后一项。

于 2015-08-06T09:57:48.140 回答
0

查看键数组处理其(自然)顺序。如果你想“特定”用户:比如说,与时间戳完全匹配的用户,视图函数看起来像:

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

使用这个确切的作者 1,时间戳范围 1~100
startkey: [1, 1]
endkey: [1, 100]

结果:
[1, 11]
[1, 12]

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

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

它遵循发出的“阵列”顺序;超过 2 个具有范围查询的属性将不会按预期方式返回。
如果您想要具有多个“范围”属性的另一种类型的排序结果,您应该包含视图功能。

于 2015-11-05T09:54:30.840 回答