couchdb,获取最后10个文件

Bri*_*ian 5 couchdb

使用mysql这将是:

SELECT * FROM thetable ORDER BY id DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

如何在couchdb中为"type":"message"的所有文档执行此操作?(没有提取所有类型的文件:消息)

谢谢

b_e*_*erb 10

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

function(doc) {
    if(doc.type && doc.type === 'message'){
        emit(doc._id, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后执行查询: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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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