“neo4j”;试一试;创建与节点的关系的步骤

“neo4j”;试一试;创建与节点的关系的步骤,neo4j,cypher,Neo4j,Cypher,如何编写下一个cyhper查询而不出错 Match (n: {id :"someid"}),(x {id:"otherId"}) OPTIONAL MATCH (n)-[]->(t:Other) merge x-[]->(t)` 问题是,t将为空,并且我将得到一个错误: 期望在t处找到节点,但未找到任何节点(null) 这是完整的查询: MATCH (traveler:${labels.N_TRAVELER} {id: {traveler}.id}) OPTION

如何编写下一个cyhper查询而不出错

Match (n: {id :"someid"}),(x {id:"otherId"})
OPTIONAL MATCH (n)-[]->(t:Other)

merge x-[]->(t)`
问题是,
t
将为空,并且我将得到一个错误:
期望在t处找到节点,但未找到任何节点(null)

这是完整的查询:

MATCH (traveler:${labels.N_TRAVELER} {id: {traveler}.id})
        OPTIONAL MATCH (traveler)-[r:${labels.R_TRAVELER_LATEST_EVENT}]->(prev:${labels.N_EVENT})
        OPTIONAL MATCH (interest:${labels.N_INTERESTS}) WHERE interest.id IN {interests}

        DELETE r
        MERGE (traveler)-[:${labels.R_TRAVELER_LATEST_EVENT}]->(trip:${labels.N_TRIP_EVENT})
        ON CREATE SET trip={trip}

        MERGE (traveler)-[:${labels.R_TRAVELER_WRITE_TRIP}]->(trip)
        MERGE (trip)-[:${labels.R_TRIP_INTEREST}]->(interest)

        WITH trip, collect(prev) as prevs
        UNWIND prevs as prev
        MERGE (trip)-[:${labels.R_EVENT_PREV_EVENT}]->(prev)
        WITH trip
        RETURN properties(trip) as trip`
所有的
标签。
都只是字符串
{interests}
是一个ID数组


基本上,我想创建一个trips的链接列表。第一个解决方案是只使用MATCH,如果没有
t
节点,它将停止查询

MATCH (n {id:"someid"}), (x {id:"otherId"})
MATCH (n)-->(t:Other)
MERGE (x)-[:RELATIONSHIP]->(t)
第二种解决方案是,如果此查询部分是更大查询的一部分,并且您需要在以后做一些事情,则收集t,如果为null,则收集将为空,因此您只能在它包含元素时进行迭代:

MATCH (n {id:"someid"}), (x {id:"otherId"})
OPTIONAL MATCH (n)-->(t:Other)
WITH n, x, collect(t) as ts
UNWIND ts as t
MERGE (x)-[:RELATIONSHIP]->(t)
WITH n, x
// continue query

下面是我用来处理可选的
合并
的解决方法:

MATCH (n {id:"someid"}), (x {id:"otherId"})
OPTIONAL MATCH (n)-->(t:Other)
FOREACH(y IN CASE WHEN t IS NULL THEN [] ELSE [1] END | MERGE (x)-[:RELATIONSHIP]->(t));

如果
t
不是
NULL
FOREACH
将只执行
MERGE
操作
。。但没有比这更优雅的解决方案了?比如merge,其中t不是null或者类似的东西?目前Cypher缺少一些条件,我相信它会出现。恐怕我现在看不到更优雅的东西有些不对劲。。正在创建关系,但在此之后,我使用n执行
,返回n
,并返回空。。有什么想法吗?你能粘贴你现在尝试的完整查询吗?是否创建了链接列表?谢谢,这是可行的,但我发现问题与以前一样。。我可以返回
x
它总是空的。。有什么想法吗?使用neo4j 3.0,如果创建一些最小的测试数据并使用
RETURN x
结束我的查询,我总是会得到
x
返回。即使
可选匹配失败,也会出现这种情况。你用的是什么neo4j版本。我使用foreach循环运行与问题中相同的查询我的查询与问题中的第一个查询相同,除了
foreach
子句。