根本问题 - 假设我的文档有"类别"和时间戳.如果我希望"foo"类别中的所有文档的时间戳都在过去两小时内,那么很简单:
function (doc) {
emit([doc.category, doc.timestamp], null);
}
Run Code Online (Sandbox Code Playgroud)
然后查询为
GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|]
Run Code Online (Sandbox Code Playgroud)
问题来自于我在过去两小时内想要类别为foo或bar的东西.如果我不关心时间,我可以通过按键集合直接按键.不幸的是,我对范围没有这样的选择.
在此期间我最终做的是将时间戳四舍五入为两小时的块,然后将查询多路复用:
POST server:5894/.../myview
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]]
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是如果我想回去大量的时间(与块大小的关系)会变得混乱.
有没有办法将多个startKey/endKey对发送到视图,类似于键:[]数组可以发布键?
有一个CouchDB问题请求让你这样做.我已经在0.10.1上添加了一个简单的,无保证的补丁,可能对你有用.它适用于我,让我做的事情如下:
{
"keys": [
{
"startkey": ["0240286524","2010","03","01"],
"endkey": ["0240286524","2010","03","07",{}]
},
{
"startkey": ["0442257276","2010","03","01"],
"endkey": ["0442257276","2010","03","07",{}]
}
]
}
Run Code Online (Sandbox Code Playgroud)
在POST主体中,它允许我在一系列日期中获取多个跟踪ID的所有数据.我打电话group=true&group_level=1给结果按跟踪ID分组.更深的组级别允许我通过跟踪id |年,跟踪id | year | month等进行分组.
多个连接对我来说是一个不可扩展的开销,因为我想要同时制作2000 :)(不,新视图不是一个选项 - 我们已经为400GB数据加上一个视图!)
问题和补丁位于https://issues.apache.org/jira/browse/COUCHDB-523.