nGQL查询能否引用双标签VID?如何用VID统计边实例数?
关于nGQL中直接通过目标顶点VID过滤边的查询方法
问题背景
我已创建两个标签的顶点实例:
INSERT VERTEX Topic (topicId, first_proposed, approval_status, followers, tagged_tally) VALUES 9999:("Sample topic id", TIMESTAMP(), "Pending", 10, 20); INSERT VERTEX Post(text_added, last_updated, author, postId, creation_date, shared_total, flagged_total, views, total_likes, is_a_repost, post_format) VALUES 4444: ("Sample text", timestamp(), "John Doe", 1234, TIMESTAMP(), 0, 0, 0, 0, false, "some format");
并多次执行以下语句,在VID为4444的Post顶点和VID为9999的Topic顶点间插入带不同时间戳的is_tagged边:
INSERT EDGE is_tagged (when_tagged) VALUES 4444 -> 9999:(timestamp('2023-06-11T02:18:43'));
目前我通过Topic的topicId属性过滤来统计这类边的总实例数:
GO FROM 4444 OVER is_tagged WHERE $$.Topic.topicId == "Sample topic id" YIELD edge AS e | GROUP BY $-.e YIELD COUNT(*) AS number;
但希望直接引用Topic的VID 9999进行过滤,而非使用属性值,请问该如何编写查询?
解决方案
在nGQL中,你可以直接通过$$._id获取目标顶点的VID作为过滤条件,也可以用TO关键字直接限定目标顶点,两种方式都能实现需求:
方式一:通过$$._id过滤
GO FROM 4444 OVER is_tagged WHERE $$._id == 9999 YIELD edge AS e | GROUP BY $-.e YIELD COUNT(*) AS number;
方式二:用TO关键字直接限定目标顶点(更简洁)
GO FROM 4444 OVER is_tagged TO 9999 YIELD COUNT(edge) AS number;
说明
$$._id是nGQL的内置变量,代表当前遍历到的目标顶点的VID,无需关联具体标签即可直接使用。- 使用
TO关键字可以在GO语句中直接指定目标顶点的VID,省略额外的过滤条件,简化查询逻辑。
内容的提问来源于stack exchange,提问作者Toby Derrum
相关产品推荐
相关产品推荐

