假设,我们使用 2 个顶点标签(女性和男性)和单个边缘标签(日期)对情侣进行建模。边缘的方向总是从女性到男性。
预期的查询结果列表是对的,其中从起始顶点到每个对的顶点之间存在一条无向路径,不同。
换句话说,结果应该包含图的连接组件的边列表,其中存在给定的顶点。
请注意,如果将原始图转换为无向图,则可能存在循环。
过滤标准:{ name: 'Adam' }
预期结果集:
Alice-[:dates]->Adam
Alice-[:dates]->Bob
Chloe-[:dates]->Bob
...
Eve-[:dates]->Edgar
Uhura-[:dates]->Spock
不是结果集的一部分,因为 Adam 和(Uhura 或 Spock)之间没有联系。
以下解决方案有效,但性能较差,因此无法在生产中使用:
match path = ()-[:dates*]-()
where any(node in to_jsonb(nodes(path)) where node.properties.name = 'Adam')
return distinct path;
(或者return distinct edges(path)
,但 AgnsBrowser 不喜欢返回路径的边缘)。
你能帮我一些建议以获得更好的解决方案吗?谢谢。
测试数据:
create
(alice: female { name: 'Alice'}),
(barbara: female { name: 'Barbara'}),
(chloe: female { name: 'Chloe'}),
(diane: female { name: 'Diane'}),
(eve: female { name: 'Eve'}),
(uhura: female { name: 'Uhura'}),
(adam: male { name: 'Adam'}),
(bob: male { name: 'Bob'}),
(charles: male { name: 'Charles'}),
(daniel: male { name: 'Daniel'}),
(edgar: male { name: 'Edgar'}),
(spock: male { name: 'Spock'})
create (alice)-[:dates]->(adam),
(alice)-[:dates]->(bob),
(barbara)-[:dates]->(bob),
(barbara)-[:dates]->(charles),
(barbara)-[:dates]->(edgar),
(chloe)-[:dates]->(bob),
(chloe)-[:dates]->(daniel),
(chloe)-[:dates]->(edgar),
(diane)-[:dates]->(edgar),
(eve)-[:dates]->(edgar),
(uhura)-[:dates]->(spock);