在组CouchDB视图中获取最新项
Get latest item by in group CouchDB view
我在CouchDB中有几个文档,其中包含日期和路径。我想要一个视图,我可以通过路径搜索(可能使用startkey和endkey),对于该路径,我希望视图返回的文档,其中日期是最新的。
一个关于我的数据看起来如何的小例子
{
"path": "abc",
"created_at": "2011-12-03T18:23:49.058Z"
}
{
"path": "abc",
"created_at": "2011-12-03T11:32:42.123Z"
}
{
"path": "cde",
"created_at": "2011-12-06T15:52:34.523Z"
}
我的当前地图函数
function(doc) {
var pathArr = doc.path.split(/'/|''/);
pathArr.splice(0,1);
emit(pathArr, doc);
}
我试图创建一个reduce函数
function(keys, values) {
var currTime = -Infinity;
var retDoc;
for (var i = 0, v; v = values[i]; i++) {
var dateInMs = new Date(v.created_at).getTime();
//if this doc has a later than than previously latest date found
if(dateInMs >= currTime)
{
currTime = dateInMs;
retDoc = v;
}
}
return retDoc;
}
这会导致错误
{"error":"reduce_overflow_error","message":"Reduce output must shrink more rapidly: Current output: ..."}
我在权威指南中读到,发生错误是因为你不应该从reduce函数返回完整的文档。还有其他解决办法吗?
我很感激我能得到的所有帮助。编辑:我只是想到了一个丑陋的解决方案,让reduce函数返回文档的_id,然后通过第二个请求获取文档。你觉得这个解决方案怎么样?如果你能找到一个好的解决方案,我将非常高兴。
我找到了一个解决方案,如果有人遇到类似的情况,我想把它贴在这里会很好。
解决方案实际上很简单,我只是将pathArray作为一个嵌套数组添加到键。这样我就可以查询文件的路径,并且只得到最新的版本。
这是我的新地图函数:
function(doc) {
if(doc.doctype === "file")
{
var pathArr = doc.guipath.split(/'/|''/);
pathArr.splice(0,1);
emit([pathArr,doc.created_at], doc);
}
}
我不使用reduce函数
通过添加以下(或类似的)参数来查询该视图:
?startkey=[["haha","file.ext"],{}]&endkey=[["haha","file.ext"]]&descending=true&limit=1
这样我就可以确保我只得到最新的
相关文章:
- Php未获取会话的最新值
- 在引用最新的rxjs时获取rxjs错误
- 从客户端的对象数组中获取最新日期的优雅方法是什么
- 如何从量角器 [3.0.0] 和黄瓜最新版本获取 cucumber-test.json
- 从数据库中获取最新的5个数据
- 在网站上获取最新的推特帖子
- 在谷歌应用程序中获取最新表单提交的responseID
- 获取谷歌硬盘文件夹中的最新文件
- 如何从对象数组中获取最新数据
- 从文本文件中获取最新数据
- 从另一个可观察对象获取价值的最佳方法,而无需组合最新
- 从已使用 AJAX 更新的列表框中获取最新值
- 使用 node.js 和 twitterAPI 获取最新推文列表
- jQuery在某些动画更改其位置后获取元素的最新顶部位置
- 获取最新的 Vimeo 产品组合视频
- 从packagist.org获取软件包的最新版本
- 使用Facebook javascript sdk获取最新的5个状态更新
- 使用Java Script获取最新的2条粗花呢
- 使用 tumblr API(JSON) 和 $.getJSON 从我的 tumblr 博客中获取最新文章
- 如何避免要求客户端清除浏览器缓存以获取最新的Javascript更改