neo4j - 这个查询在 neo4j/gremlin 中可行吗?

标签 neo4j graph-databases gremlin

如果我有一个看起来像这样的图表:

N3->member_of->N1
N2->knows->N1
N3->likes->N2
N4->member_of->N1
N5->likes->N2

有没有办法执行单个查询来执行以下操作:

  1. 如果从 N3 开始将返回 N2
  2. 从 N4 开始的相同查询将返回 N2
  3. 从 N5 开始的相同查询将返回 N2

(最好是在 gremlin 中)

编辑:澄清:只要一级关系是“member_of”,我就可以进行二级连接。

最佳答案

这是一个很老的问题,但由于没有人提出 Gremlin 解决方案,所以它是:

我拿了Bobbys初始化脚本:

g = new TinkerGraph()
(1..5).each { g.addVertex(it) }
g.addEdge(g.v(3), g.v(1), "member_of") 
g.addEdge(g.v(2), g.v(1), "knows")
g.addEdge(g.v(3), g.v(2), "likes")
g.addEdge(g.v(5), g.v(2), "likes") 
g.addEdge(g.v(4), g.v(1), "member_of")

这是您的 Gremlin 查询:

gremlin> g.v(3).copySplit(_().out('likes'), _().out('member_of').loop('start'){true}{true}.in('knows')).exhaustMerge().dedup()
==>v[2]
gremlin> g.v(4).copySplit(_().out('likes'), _().out('member_of').loop('start'){true}{true}.in('knows')).exhaustMerge().dedup()
==>v[2]
gremlin> g.v(5).copySplit(_().out('likes'), _().out('member_of').loop('start'){true}{true}.in('knows')).exhaustMerge().dedup()
==>v[2]

干杯, 丹尼尔

关于neo4j - 这个查询在 neo4j/gremlin 中可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621574/

相关文章:

database - Titan 和 Neo4j 图数据库有什么区别?

gremlin - 如何在 gremlinpython 中使用 geoshape

javascript - 如何在版本 ^3 上使用 gremlin 启动与 Cosmos DB 图形数据库的新连接

hadoop - 在 Windows 上安装 Titan DB 时出错

security - neo4j 3.5 是否受 CVE-2021-44228 影响?

java - Spring 数据 Neo4J 4.0.0 : BeforeSaveEvent not firing?

java - 升级 Neo4J 3.3.4 -> 3.4.0 缺少依赖项 "com.sun.jersey.multipart.FormDataParam",替代品是什么?

merge - Neo4j 在大数据集上的 MERGE 命令

neo4j - 寻找与其他人有联系的人

java - 我如何使用 GraphRepositories 返回具有指定深度的复杂 POJO(当前使用 Neo4j 模板)