couchdb,拿到最后10份文件
使用mysql,这将是:couchdb,拿到最后10份文件,couchdb,Couchdb,使用mysql,这将是: SELECT * FROM thetable ORDER BY id DESC LIMIT 10 如何在couchdb中为所有“类型”:“消息”的文档执行此操作?(不提取类型为:message的所有文档) 谢谢创建一个显示所有文档ID的视图。视图键将用于自动排序 function(doc) { if(doc.type && doc.type === 'message'){ emit(doc._id, null); } }
SELECT * FROM thetable ORDER BY id DESC LIMIT 10
如何在couchdb中为所有“类型”:“消息”的文档执行此操作?(不提取类型为:message的所有文档)
谢谢创建一个显示所有文档ID的视图。视图键将用于自动排序
function(doc) {
if(doc.type && doc.type === 'message'){
emit(doc._id, null);
}
}
然后执行一个查询:
因为您需要完整的文档,所以我们没有在视图中包含任何值。相反,我们添加了include_docs=true
来获取视图条目的每个完整文档
请注意,还有一个内置视图执行相同的操作:
PS:您应该知道这样一个事实,CouchDB默认使用UUID作为ID,如果您真的想获得最新的文档,这将使排序或多或少变得无用。提供您自己的增量ID(关于分发/复制呢?),或者使用一个新字段来存储创建文档的时间,并在视图中使用
如果您的文档有一个
创建的字段(即UNIX时间戳、JavaScript Date.now()或类似RFC 3339的字符串),您可以根据这些值建立索引
以下是基于时间的视图:
function(doc) {
if(doc.type && doc.type === 'message' && doc.created){
emit(doc.created, null);
}
}
请注意,我们不会发出doc.\u id本身。但是,CouchDB会自动存储doc.\u id
每个发出的键/值对的数据来源,因此我们可以再次使用include\u docs=true
来获取完整的文档
查询如果您的文档的ID已经是增量的,而不是CouchDB的默认UUID,您甚至不需要定义视图,您可以使用默认的\u all\u docs视图,例如
http://couchdb_host/your_db/_all_docs?limit=10&descending=true&include_docs=true
谢谢你的回复。但是,执行此操作将返回包含type:message的10个最旧文档。我需要10份最新的文件。我能想到的唯一方法是提取每个文档id,从结果集中提取最后10个id,然后直接用id调用文档…这感觉不是正确的方法。你读过我的PS吗?这取决于您的单据ID的生成/分配方式。也许你必须切换到descending=false
,或者甚至在你的文档中添加一个生成的字段并使用它。哇,不,它没有,我发誓我一定试过100次了哈哈……不知道我在哪里搞砸了。谢谢你说的最后一次是什么意思?最近的还是最老的?