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

问题描述:

我有包含用户名(帖子的作者)和时间戳(上传时间)等字段的帖子。我很努力地创建一个视图,当查询时,按照时间戳的降序来抓取特定用户的帖子。CouchDb由用户按降序时间戳顺序对帖子进行排序

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

我可以查询由特定用户创作的文档,但我如何仅在时间戳字段上应用递减= true?

使用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视图的最佳方式的绝佳方式。