为arangodb编写一个过滤数据的查询

时间:2017-07-20 22:31:19

标签: graph arangodb aql

我有一个由两个集合组成的图表,一个是60,000个服务和10个产品的集合,另一个是将产品连接到服务的100万个边缘的集合。我们希望在图表中找到连接到所有10个产品的所有服务顶点。基本上,我们希望在单个服务中找到所有十个产品的交集,并返回发生这种情况的所有服务。十种产品中的每一种都具有不同的产品ID。有没有人对如何编写一个返回产品交叉点的有效查询有任何建议? 以下是每个集合的一小部分的屏幕截图,采用JSON格式。

first screenshot

second screenshot

1 个答案:

答案 0 :(得分:1)

以下查询使用两个集合productsedgeCol。它首先收集prods中的所有10个产品,然后迭代所有服务,并针对每个服务搜索所有连接顶点(产品),并检查它们是否包含在prods中。

LET prods = (
  FOR product IN products
    FILTER product.ProductType == 'Product'
    RETURN product
)

FOR service IN products
  FILTER service.ProductType == 'Service'
  FILTER prods ALL IN (
    FOR v, e, p IN 1 OUTBOUND service edgeCol
      RETURN v
  )
  RETURN service

只有10个产品和超过60,000个服务,您应该考虑将您的收藏集products分成两个集合productsservices,其中产品仅包含您的10个产品。然后,您可以删除字段ProductType。这样可以进行更高效的查询。

LET prods = (
  FOR product IN products
    RETURN product
)

FOR service IN services
  FILTER prods ALL IN (
    FOR v, e, p IN 1 OUTBOUND service edgeCol
      RETURN v
  )
  RETURN service