潜在的问题 - 让我说我的文件有 “类别” 和 时间戳。如果我想要的所有文件 “富” 时间戳在过去两小时内的类别,很简单:
function (doc) {
emit([doc.category, doc.timestamp], null);
}
然后查询为
GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|]
当我想要类别的东西时,问题就出现了 FOO 要么 酒吧,在最后两个小时内。如果我不关心时间,我可以通过按键集合直接按键。不幸的是,我对范围没有这样的选择。
在此期间我最终做的是将时间戳四舍五入到两小时的块,然后将查询多路复用:
POST server:5894/.../myview
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]]
它可以工作,但是如果我想要回去大量的时间(与块大小的关系)会变得混乱。
有没有办法将多个startKey / endKey对发送到视图,类似于键:[]数组可以发布键?
你可能最好只做两个查询。 CouchDB可以很好地处理多个同时查询,因此分离出几个进程/线程并单独查询foo和bar文档。
CouchDB目前不支持多范围查询。在一个查询中,ORing和ANDing键几乎不可行。
你可能最好只做两个查询。 CouchDB可以很好地处理多个同时查询,因此分离出几个进程/线程并单独查询foo和bar文档。
CouchDB目前不支持多范围查询。在一个查询中,ORing和ANDing键几乎不可行。
有一个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",{}]
}
]
}
在POST主体中,它允许我获取多个跟踪ID的所有数据,包括一系列日期。我打电话给 group=true&group_level=1
通过跟踪ID分组结果。更深的组级别允许我通过跟踪id |年,跟踪id | year | month等进行分组。
多个连接对我来说是一个不可扩展的开销,因为我希望同时创建2000 :)(不,新视图不是一个选项 - 我们已经为400GB数据加上一个视图!)
问题和补丁是在 https://issues.apache.org/jira/browse/COUCHDB-523 。
这已在较新版本的CouchDB中添加。要添加多个范围的开始/结束键,您可以对视图使用POST请求,其主体看起来像这样:
{
"queries": [
{ "startkey": 10, "endkey": 11 },
{ "startkey": 16, "endkey": 18 }
]
}
我知道这是一个古老的问题,但我最初在找到这个时就找到了它!