Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
couchdb,拿到最后10份文件_Couchdb - Fatal编程技术网

couchdb,拿到最后10份文件

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); } }

使用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);
    }
}
然后执行一个查询:

因为您需要完整的文档,所以我们没有在视图中包含任何值。相反,我们添加了
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次了哈哈……不知道我在哪里搞砸了。谢谢你说的最后一次是什么意思?最近的还是最老的?