Nebula nGQL是否有类似JOIN相关功能实现?

  • nebula 版本:nebula-graphd version: 3.3.0
  • 部署方式:分布式
  • 安装方式:源码编译
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘 HDD
    • CPU 1 core/processor, Intel Xeon Processor
    • 内存 3.8G
  • 问题的具体描述:
    我在利用nGQL实现相关语句功能遇到以下场景:
    1.需要根据给定某个人物姓名的firstName通过person_knows_person这个edge查找1 TO 3 STEP所有人;2.根据步骤1中查到的人去通过person_isLocatedIn_place去查找这些人的位于的工作地点;3.根据步骤1中查到的人通过person_studyAt_organisation去查找这些人学习的大学;4.根据步骤1中查找的人通过person_workAt_organisation去查找这些人工作的公司;5.根据步骤3,4中查找到的学校和公司去查找这些学校和公司位于哪个国家,并将所有步骤查询到的信息组合起来
    我目前已经写好的nGQL如下:
LOOKUP ON artist WHERE person.firstName == "$firstName" YIELD id(vertex) AS id | GO 1 TO 3 STEPS FROM $-.id OVER person_knows_person YIELD id(vertex) | GO FROM $-.id OVER person_isLocatedIn_place YIELD properties($$).name

如上所示,这条句子只能完成步骤1和步骤2,剩余步骤无法完成,我查找文档发现好像没有方法能够使nGQL完成类似JOIN的功能,即将所有子句查询到的结果拼装起来,不知道有没有人能够给予帮助。

用match 和 with

// 1
MATCH(v)-[e:person_knows_person*1..3]-(v2) WHERE v.person.firstName == "firstName"
// 2
OPTIONAL MATCH (v2)-[e2: person_isLocatedIn_place]-(v3)
// 3
OPTIONAL MATCH (v2)-[e3: person_studyAt_organisation]-(v4)
// 4
OPTIONAL MATCH (v2)-[e3: person_workAt_organisation]-(v5)
// 查找国家
...
WITH v2 as personName, v3 as workingPlace, v4 as college, v5 as company
RETURN personName, workingPlace, college, company, country

可以尝试下多个 match 和 optional match 组合

3 个赞

用$var就可以

1 个赞

我调整了一下,发现有个问题,就是我针对tag person的firstName创建了索引,但是用你提供的句子去执行的时候发现报错,报错内容:

-1005:Scan vertices or edges need to specify a limit number, or limit number can not push down.

不管我在句子末尾添加LIMIT 20,仍然报同样的错误,我有点不太明白,能够给一些指导嘛?

MATCH(v:person)-[e:person_knows_person*1…3]-(v2) WHERE v.person.firstName == “firstName” RETURN v

1 个赞

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。