求组一个ngql语句该怎么写

先一跳,返回这个点的所有连接到的点,然后这个连接到的点, 进行一个分组限制每种类型只返回10个,然后每种类型的10个点进行二跳,
理想中的语句如下

MATCH (a)-[b]->(c) WHERE id(a)=="******" group by c  limit 10   OPTIONAL MATCH (c)-[d]->(e)

group + limit + 再次扩展,我确实没有想到好的方法,能用一个ngql表达出来。

你可以在应用层,拆成两步更简单一点。
[GROUP BY - Nebula Graph Database 手册]

如果拆成两步有什么好的方法么 好像在图数据库里面group by更多的是用于计算

目前,ngql 还不支持你这个场景,https://github.com/vesoft-inc/nebula/pull/4932 这个 pr 合入之后可以实现。
语句类似:

MATCH (a)-[b]->(c) where id(a)="*****"
WITH labels(c) AS ctype, collect(distinct c)[0..10] AS c_with_same_type
UNWIND c_with_same_type AS cc
OPTIONAL MATCH (cc)-[d]->(e) 
RETURN cc, d, e

基本思路是用 groupby+list slicing 完成组内 limit 的语义。

2 个赞