【问题标题】:Intersect two traversals in ArangoDB在 ArangoDB 中相交两个遍历
【发布时间】:2016-10-13 21:11:19
【问题描述】:

我试图了解如何在 ArangoDB 中将两个结果相交,我的场景如下所示。

我可以通过以下查询轻松找到居住在西班牙、岛屿或欧洲的用户:

FOR x IN 1..3 INBOUND "places/Europe" situedIn,livesIn 
FILTER IS_SAME_COLLECTION('users',x)
return x

我想了解的是扩展搜索功能以包括职业的最佳方式:

例子:

  • 归还西班牙所有警察(归还 [A])
  • 归还所有欧洲警察(归还 [A])
  • 返回欧洲的所有法律(返回 [A,B])

感谢您的帮助

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    经过一番搜索,答案是 INTERSECTION

    FOR a IN INTERSECTION (
    
    (FOR x IN 1..3 INBOUND "places/Europe" situedIn
       FOR p IN INBOUND x livesIn
       return p),
    
    (FOR x IN 1..3 INBOUND "profession/Medical" specializes
       FOR p IN INBOUND x worksWith
       return p)
    
    ) RETURN a
    

    【讨论】:

      【解决方案2】:

      _commonNeighbors 函数可能正是您想要的。它返回两组顶点之间的交集。

      https://docs.arangodb.com/3.0.10/Manual/Graphs/GeneralGraphs/Functions.html#commonneighbors

      【讨论】:

      • 谢谢。这与以下解决方案有何不同?
      • 我不完全确定幕后发生了什么,但我相信这是一种优化算法,可以最大限度地减少执行搜索所需的遍历。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多