CouchDb 按时间戳降序对用户发布的帖子进行排序
CouchDb sort posts by a user in descending timestamp order
我有 posts,其中包含用户名(post 的作者)和时间戳(上传时间)等字段。我正在努力创建一个视图,当查询时,特定用户按时间戳的降序获取 posts。
map: function(doc) {
if (doc.type == 'post'){
emit(doc.username, [doc._id, doc.timestamp]);
};
},
我可以查询由特定用户创作的文档,但如何仅在时间戳字段上应用 descending = true?
对于 CouchDB 视图,只有键 可以确定索引的排序顺序。该值根本不计入 sorting/grouping。
因此,如果您想要一个按创建顺序(升序或降序)输出用户帖子的视图,您将发出一个数组作为一种 "composite key"。我强烈建议通读 CouchDB 文档中的 Guide to Views。
对于你的例子,我会制作一个这样的地图函数:
function (doc) {
if (doc.type === 'post') {
emit([ doc.username, doc.timestamp ]);
}
}
然后,您可以使用如下查询获取特定用户的帖子:
?start_key=["username"]&end_key=["username","\ufff0"]
这将找到给定 "username" 的帖子,按时间戳升序排列。要颠倒顺序,请改用以下查询:
?start_key=["username","\ufff0"]&end_key=["username"]&descending=true
请注意,start_key
和 end_key
的值已互换,并添加了 descending=true
。
如前所述,通读他们的文档,因为这是让您了解使用 CouchDB 视图的最佳方式的绝佳方式。
我有 posts,其中包含用户名(post 的作者)和时间戳(上传时间)等字段。我正在努力创建一个视图,当查询时,特定用户按时间戳的降序获取 posts。
map: function(doc) {
if (doc.type == 'post'){
emit(doc.username, [doc._id, doc.timestamp]);
};
},
我可以查询由特定用户创作的文档,但如何仅在时间戳字段上应用 descending = true?
对于 CouchDB 视图,只有键 可以确定索引的排序顺序。该值根本不计入 sorting/grouping。
因此,如果您想要一个按创建顺序(升序或降序)输出用户帖子的视图,您将发出一个数组作为一种 "composite key"。我强烈建议通读 CouchDB 文档中的 Guide to Views。
对于你的例子,我会制作一个这样的地图函数:
function (doc) {
if (doc.type === 'post') {
emit([ doc.username, doc.timestamp ]);
}
}
然后,您可以使用如下查询获取特定用户的帖子:
?start_key=["username"]&end_key=["username","\ufff0"]
这将找到给定 "username" 的帖子,按时间戳升序排列。要颠倒顺序,请改用以下查询:
?start_key=["username","\ufff0"]&end_key=["username"]&descending=true
请注意,start_key
和 end_key
的值已互换,并添加了 descending=true
。
如前所述,通读他们的文档,因为这是让您了解使用 CouchDB 视图的最佳方式的绝佳方式。