gpt4 book ai didi

neo4j - Cypher 可选匹配

转载 作者:行者123 更新时间:2023-12-01 00:55:49 25 4
gpt4 key购买 nike

我有一个图表,其中包含两种类型的节点(对象和片段)和两种类型的链接(similarTo 和 contains)。有些碎片是由碎片组成的。

我想从一组对象开始提取每个部分的路径。

MATCH (o:Object)
WITH o
OPTIONAL MATCH path = (p:Piece) <-[:contains*]- (o) -[:similarTo]- (:Object)
RETURN path

上面的查询只返回部分片段。在返回的图中,一些对象不直接连接到任何部分,后者不会返回,尽管它们实际上有!

我可以将查询更改为:
MATCH (o:Object) -[:contains*]-> (p:Piece) 
OPTIONAL MATCH (o) –[:similarTo]- (:Object)

但是,我没有设法返回该查询的整个路径,我需要返回节点和链接的集合:
WITH rels(path) as relations , nodes(path) as nodes 
UNWIND relations as r unwind nodes as n
RETURN {nodes: collect(distinct n), links: collect(distinct {source: id(startNode(r)), target: id(endNode(r))})}

我将不胜感激任何建议。

最佳答案

这样的事情可以解决问题吗?

我在这里创建了一个代表物体和碎片的小图:http://console.neo4j.org/r/abztz4

使用 UNION ALL 执行不同的查询

在这里,您将在一组路径中组合两个用例:

MATCH (o:Object)
WITH o
OPTIONAL MATCH p=(o)-[:CONTAINS]->(piece)
RETURN p
UNION ALL
MATCH (o:Object)
WITH o
OPTIONAL MATCH p=(o)-[:SIMILAR_TO]-()-[:CONTAINS]->(piece)
RETURN p

关于neo4j - Cypher 可选匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28139939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com