Couchdb 查找时间范围与给定时间范围相交的文档
有一个文档列表Couchdb 查找时间范围与给定时间范围相交的文档,couchdb,Couchdb,有一个文档列表p,其中有两个时间戳,表示文档有效的时间范围[p]。创建了这些时间间隔的索引: function (doc) { emit([doc.start, doc.end], someStuff(doc)); } 我们希望接收的文档p在一些结束时间戳E之前开始,在一些开始时间戳S之后停止: P(S, E) = { P | P_s <= E && P_e >= S } 结果p(A,E)={P0,P1,P2,P3,P4}是错误的,这在检查以下示例的S=1
p
,其中有两个时间戳,表示文档有效的时间范围[p]
。创建了这些时间间隔的索引:
function (doc) {
emit([doc.start, doc.end], someStuff(doc));
}
我们希望接收的文档p
在一些结束时间戳E
之前开始,在一些开始时间戳S
之后停止:
P(S, E) = { P | P_s <= E && P_e >= S }
结果p(A,E)={P0,P1,P2,P3,P4}
是错误的,这在检查以下示例的S=17
和E=30
时是有意义的:
key startkey endkey accept
_________________________________________________________________________
[10,15] [0,17] <= [10,15] <= [30, {}] -> True <- This is wrong
[15,25] [0,17] <= [15,25] <= [30, {}] -> True OK
[25,30] [0,17] <= [25,30] <= [30, {}] -> True OK
[25,50] [0,17] <= [25,50] <= [30, {}] -> True OK
[35,50] [0,17] <= [35,50] <= [30, {}] -> False OK
键开始键结束键接受
_________________________________________________________________________
[10,15][0,17]使用端点更容易实现。您可以将查询表示为选择器
:
{
"selector": {
"start": { "$lt": 100 },
"end": { "$gt": 300 }
}
"sort": ["start"]
}
这相当于SQLSELECT*FROM db,其中start 300 SORY BY start
你几乎肯定也需要一个“开始”来加快速度。我在创建索引时遇到了一些麻烦,但原则上它是有效的,谢谢!
key startkey endkey accept
_________________________________________________________________________
[10,15] [0,17] <= [10,15] <= [30, {}] -> True <- This is wrong
[15,25] [0,17] <= [15,25] <= [30, {}] -> True OK
[25,30] [0,17] <= [25,30] <= [30, {}] -> True OK
[25,50] [0,17] <= [25,50] <= [30, {}] -> True OK
[35,50] [0,17] <= [35,50] <= [30, {}] -> False OK
{
"selector": {
"start": { "$lt": 100 },
"end": { "$gt": 300 }
}
"sort": ["start"]
}