couchdb,获取最后10个文件

时间:2011-08-12 08:33:24

标签: couchdb

使用mysql,这将是:

SELECT * FROM thetable ORDER BY id DESC LIMIT 10

如何在couchdb中为所有带有“type”的文档执行此操作:“message”? (不用类型:消息拉所有文件)

由于

2 个答案:

答案 0 :(得分:10)

创建一个发出所有文档ID的视图。视图键将用于自动排序。

function(doc) {
    if(doc.type && doc.type === 'message'){
        emit(doc._id, null);
    }
}

然后执行查询:http://host/yourdb/_design/yourdesigndoc/_view/viewname?limit=10&include_docs=true&descending=true

因为您需要完整的文档,所以我们在视图中没有包含任何值作为值。相反,我们添加include_docs=true来获取视图条目的每个完整文档。

请注意,还有一个内置视图也是如此:http://host/yourdb/_all_docs?limit=10&include_docs=true&descending=true

PS:你应该知道CouchDB默认使用UUID作为ID这一事实,如果你真的想获得最新的文档,它会使排序或多或少变得无用。要么提供自己的增量ID(分发/复制呢?),要么使用一个新字段来存储创建文档的时间并在视图中使用。


如果您的文档具有created字段(即UNIX时间戳,JavaScript Date.now()或甚至类似RFC 3339的字符串),则可以为这些值构建索引。

以下是基于时间的观点:

function(doc) {
    if(doc.type && doc.type === 'message' && doc.created){
        emit(doc.created, null);
    }
}

请注意,我们不会发出doc._id本身。但是,CouchDB会自动为每个发出的键/值对存储数据所在的doc._id,因此我们可以再次使用include_docs=true来获取完整的文档。

查询http://host/yourdb/_design/yourdesigndoc/_view/viewname?limit=10&include_docs=true&descending=true

答案 1 :(得分:3)

如果文档的ID已经是增量的,而不是CouchDB的默认UUID,您甚至不需要定义视图,只需使用默认的 _all_docs 视图,例如

http://couchdb_host/your_db/_all_docs?limit=10&descending=true&include_docs=true