使用场景对GRAPH查询建模

时间:2018-06-14 21:24:00

标签: graph-databases arangodb aql

我有2个顶点,一个是USER,一个是PLACE,任何用户都可以查看某个地方,任何用户都可以对该评论进行评论或评论。在这种情况下,将有两个边缘存储由任何用户在任何地方完成的审查,一个存储在该审查上完成的任何类型的活动。假设我需要在任何地方获取所有评论,并在一个查询中查看每个评论的相似和评论计数,我该如何编写此类查询。

1 个答案:

答案 0 :(得分:0)

假设您使用用户地点来存储顶点和边活动审核和标签评论,赞或审核以存储您可以使用深度为1的图遍历的活动,即使用地方集合的所有顶点作为起始顶点。

以下查询会遍历所有地方文档,并为每个文档返回赞,评论和评论。

FOR vertex IN place
    LET likes = LENGTH (FOR v, e, p IN 1..1 ANY vertex review, activity FILTER p.edges[0].label == 'like' RETURN 1)
    LET reviews = (FOR v, e, p IN 1..1 ANY vertex review, activity FILTER p.edges[0].label == 'review' RETURN p.edges[0].rv)
    LET comments = LENGTH (FOR v, e, p IN 1..1 ANY vertex review, activity FILTER p.edges[0].label == 'comment' RETURN 1)
    RETURN {place:vertex.name, likes:likes, reviews: reviews, comments: comments}

过滤器指定遍历边的活动。标签 like / comment 的边数量表示此地点的喜欢/评论数量,而评论遍历则返回带有 rv 属性的评论保存在边缘。