查询推荐好友的ngql编写问题

提问参考模版:

我的需求是查询推荐好友,具体为 查询两跳后没有关注自己的节点和出现数量(比如qq推荐的 某某某和你有19个共同好友,19为出现数量)

我目前的查询语句:
go 2 steps from “10000” over follow yield follow._dst as id
| group by $-.id YIELD $-.id as dst_id, count(*) AS apear_count
minus go from “10000” over follow reversely yield follow._dst as dst_id, 1 as apear_count
| ORDER BY apear_count DESC;

目前问题1:minus没有正常工作,我测试了下minus需要查询出现的多列值都相同才可以减去,目前还没有想出好的方案
目前问题2:order by很奇怪没有正常工作

我的问题和 社交二度关系查询 - #22 由 tomZou12 相似,不过我还想要查询数量

背景:第一次接触图数据库,可能出现的问题比较多

感谢大佬解惑

你好,

  1. minus 是集合运算符, 所以需要要求多列值相同
  2. pipe 的优先度高于集合运算符, 你这种用法需要加圆括号, 详见 集合运算符 - Nebula Graph Database 手册

试试这个语句:

(GO 2 steps FROM "Tim Duncan" OVER teammate YIELD  teammate._dst AS id | YIELD $-.id AS dsts 
MINUS 
GO FROM  "Tim Duncan" OVER teammate REVERSELY YIELD  teammate._dst as id | YIELD $-.id AS dsts) 
| YIELD $-.dsts as name, COUNT(*) as appear_count

感谢Aiee,

(GO 2 steps FROM "Tim Duncan" OVER teammate YIELD  teammate._dst AS id | YIELD $-.id AS dsts 
MINUS 
GO FROM  "Tim Duncan" OVER teammate REVERSELY YIELD  teammate._dst as id | YIELD $-.id AS dsts) 
| YIELD $-.dsts as name, COUNT(*) as appear_count

两跳后排除反向一跳,这样可以满足我的需求,我还要排除一下这个节点自己应该怎么写?
比如Tim和Tony是双向好友,Tim两跳后会回到Tim.

再次感谢Aiee大哥的解惑

不客气, 排除起始点可以在第一次拿两跳的时候加个过滤:

// 从“Tim Duncan“ 出发走两步, 获得的全部点除去“Tim Duncan” 本身的结果
(GO 2 steps FROM "Tim Duncan" OVER teammate WHERE teammate._dst!="Tim Duncan" YIELD  teammate._dst AS id | YIELD $-.id AS dsts 
// 减去所有到达 “Tim Duncan” 的点
MINUS
GO FROM  "Tim Duncan" OVER teammate REVERSELY YIELD  teammate._dst AS id | YIELD $-.id AS dsts) 
| YIELD $-.dsts as name, COUNT(*) AS appear_count
4 个赞

:+1:太强了,完美解决我的问题,辛苦Aiee大哥

如果觉得你的 Aiee 大哥解决了你的问题,可以勾选他的某个回复为【解决方案】哈 :joy: 谢谢 nicolas 啦

ok, 新技能 get​:heavy_check_mark:

2 个赞

该话题在最后一个回复创建后7天后自动关闭。不再允许新的回复。

浙ICP备20010487号