CouchDb按用户按降序时间戳顺序对帖子进行排序

时间:2016-11-07 11:04:25

标签: couchdb

我的帖子中包含用户名(帖子的作者)和时间戳(上传时间)等字段。我正在努力创建一个视图,在查询时,按时间戳的降序抓取特定用户的帖子。

map: function(doc) {
    if (doc.type == 'post'){
        emit(doc.username, [doc._id, doc.timestamp]);
    };
},

我可以查询特定用户创作的文档但是如何仅在时间戳字段中应用descending = true?

1 个答案:

答案 0 :(得分:2)

使用CouchDB视图时,只有键可以确定索引的排序顺序。该值根本不考虑排序/分组。

因此,如果您想要一个用户按创建顺序(升序或降序)输出帖子的视图,您将发出一个数组作为一种"复合键"。我强烈建议您阅读CouchDB文档中的Guide to Views

对于你的例子,我会制作一个这样的地图函数:

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

然后,您可以使用以下查询获取特定用户的帖子:

?start_key=["username"]&end_key=["username","\ufff0"]

哪个会找到给定的"用户名"按时间戳递增排序。要反转排序,请改用以下查询:

?start_key=["username","\ufff0"]&end_key=["username"]&descending=true

请注意,start_keyend_key的值已互换,并且已添加descending=true

如前所述,请仔细阅读他们的文档,因为它是了解使用CouchDB视图的最佳方式的绝佳方式。