Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Couchdb 查找时间范围与给定时间范围相交的文档_Couchdb - Fatal编程技术网

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"]
}
这相当于SQL
SELECT*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"]
}