背后的问题 - 让我们说我的文档具有的 “类别”时间戳的。如果我想在所有文档中的“富” 的有时间戳的最后两个小时内,这就是类,它很简单:

function (doc) {
  emit([doc.category, doc.timestamp], null);
}

和然后查询作为

GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|]

在问题出现时,我想在一些类别的的或的,最后两个小时内。如果我不关心的时候,我可以直接通过按键集合键拉。不幸的是,我有范围没有这样的选项。

我最终什么事在此期间做的是四舍五入的时间戳两小时块,然后复用查询出来:

POST server:5894/.../myview
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]]

它的工作原理,但会变得混乱,如果我想将大量的时间回去(在关系块大小)。

有一种方法来发送多个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",{}]
        }
    ]
}

在POST身体,这让我获得跨越多个跟踪ID的所有数据,对于一个日期范围。我group=true&group_level=1打电话有通过跟踪ID分组的结果。更深组级别将允许我按跟踪ID |一年,跟踪ID |一年|。等一个月

多重连接是一个不可扩展的开销我,我会寻求使2000同时:)(不,一个新的观点是不是一种选择 - 我们已经在400GB的数据加上一个视图)

问题和贴片是在 https://issues.apache.org/jira/浏览/ CouchDB的-523

其他提示

您可能会更好过只是做两个查询。 CouchDB的可处理多个同时的查询相当好,从而剥离几个进程/线程,查询foo和bar文档seperately。

CouchDB的当前不支持多个范围查询。或运算,并取与键是相当多的没有在一个查询中是可行的。

这已在CouchDB中的较新版本被添加。要添加开始/结束键的多个范围,您可以使用POST请求你的看法,有身体,看起来是这样的:

{
  "queries": [
    { "startkey": 10, "endkey": 11 },
    { "startkey": 16, "endkey": 18 }
  ]
}

我知道这是一个老问题,但我最初发现它时,我一直在寻找的正是这种!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top