ArangoDB在尝试运行包含COLLECT子句的遍历AQL时崩溃

ArangoDB在尝试运行包含COLLECT子句的遍历AQL时崩溃,arangodb,aql,Arangodb,Aql,数据模型为: 书籍-文档 页面-文档。页面可能只包含一个对另一本书的引用 书籍\u页面-边缘。从一本书到另一页,从一页到另一本书 例如: book1 -> (edge) -> page1 -> (edge) -> book2 book1 -> (edge) -> page2 -> (edge) -> book2 book1 -> (edge) -> page3 -> (edge) -> book2 book1 -> (

数据模型为:

书籍-文档

页面-文档。页面可能只包含一个对另一本书的引用

书籍\u页面-边缘。从一本书到另一页,从一页到另一本书

例如:

book1 -> (edge) -> page1 -> (edge) -> book2
book1 -> (edge) -> page2 -> (edge) -> book2
book1 -> (edge) -> page3 -> (edge) -> book2
book1 -> (edge) -> page4 -> (edge) -> book3
book2 -> (edge) -> page5 -> (edge) -> book4
book2 -> (edge) -> page6 -> (edge) -> book4
book2 -> (edge) -> page7 -> (edge) -> book4
book2 -> (edge) -> page6 -> (edge) -> book4
...
目标是在书籍之间建立边缘,避免重复。book1包含几个提到book2的页面,但我只需要一个边缘。Id与book1中引用book2的次数无关

AQL

FOR b1 IN books
    FOR v IN 1..1 OUTBOUND b1 books_pages
       FOR b2 IN 1..1 OUTBOUND v books_pages
       COLLECT  from = b1._id, to = b2._id
  RETURN {'from':from, 'to': to}

当数据库中的文档数量很大时,arangodb崩溃。这个查询是否有问题,或者这只是arangodb方面的一个bug

我无法对崩溃发表评论,尤其是所有原因,因为您没有提供任何关于它的信息以及它是如何表现出来的——如果原因是内存不足终止/重新启动,您应该提到这一点(如果arangodb日志没有帮助,请检查系统日志)

但是关于你的问题:你对所有长度为3的唯一路径不感兴趣吗?那不是浓缩成

FOR b IN books
   FOR v,e,p IN 2..2 OUTBOUND b GRAPH 'books'
      RETURN DISTINCT {"from": p.vertices[0]._id, "to": p.vertices[2]._id}

它适用于非常小的样本集。也许这是一个稍微轻一点的查询计划,刽子手

我无法对崩溃发表评论,尤其是所有原因,因为您没有提供任何关于它的信息以及它是如何表现出来的——如果原因是内存不足终止/重新启动,您应该提到这一点(如果arangodb日志没有帮助,请检查系统日志)

但是关于你的问题:你对所有长度为3的唯一路径不感兴趣吗?那不是浓缩成

FOR b IN books
   FOR v,e,p IN 2..2 OUTBOUND b GRAPH 'books'
      RETURN DISTINCT {"from": p.vertices[0]._id, "to": p.vertices[2]._id}

它适用于非常小的样本集。也许这是一个稍微轻一点的查询计划,刽子手

向AQL添加选项有助于解决该问题

OPTIONS {uniqueEdges: 'path',  uniqueVertices: 'global', bfs: true }")

向AQL添加选项有助于解决该问题

OPTIONS {uniqueEdges: 'path',  uniqueVertices: 'global', bfs: true }")

我还试图用DISTINCT解决这个问题,但由于各种原因,我没有成功。实际有帮助的是:选项{uniquedges:'path',uniqueVertices:'global',bfs:true}”)我也试图用DISTINCT解决这个问题,但由于各种原因没有对我起作用。实际有帮助的是:选项{uniquedges:'path',uniqueVertices:'global',bfs:true}”)