首页 > 解决方案 > 使用场景建模 GRAPH 查询

问题描述

我有 2 个顶点,一个是 USER,一个是 PLACE,任何用户都可以评论一个地方,任何用户都可以喜欢或评论该评论。在这种情况下,将有两条边,一条存储任何用户在任何地方所做的评论,另一条存储对该评论所做的任何类型的活动。假设我需要在单个查询中获取任何地方的所有评论以及每条评论的点赞数和评论数,我该如何编写这样的查询。

标签: graph-databasesarangodbaql

解决方案


假设您正在使用userplace来存储您的顶点和边活动,请使用标签评论查看或查看以存储您可以使用深度为 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的评论。


推荐阅读