Neo4J 在 Cypher 中创建临时变量

Posted

技术标签:

【中文标题】Neo4J 在 Cypher 中创建临时变量【英文标题】:Neo4J create temp variable within Cypher 【发布时间】:2015-02-06 21:37:52 【问题描述】:

所以我的***问题是我试图返回 MERGE 是否导致创建新节点。

为了做到这一点,我想我可以创建一个简单的临时布尔值,使用 ON CREATE 将其设置为 TRUE

我想象它是如何工作的:

MERGE(: Person id:'Tom Jones')
WITH false as temp_bool
ON CREATE set temp_bool = true
RETURN temp_bool

显然这不起作用。

我正在寻找一种在 Cypher 查询中创建任意临时值的方法,并能够最终返回这些变量。

谢谢

【问题讨论】:

【参考方案1】:

你可以做你想做的事,方法如下(结合我的第一个答案,加上@cybersam 的补充)。您只需使用您创建然后删除的节点属性来执行此操作,而不是像您一直在尝试的那样使用未绑定的变量。

MERGE(tom:Person id:'Tom Jones')
ON CREATE set tom.temp_bool = true
ON MATCH set tom.temp_bool = false
WITH tom, tom.temp_bool AS result
REMOVE tom.temp_bool
RETURN result;

【讨论】:

其实可以在同一个查询中去掉 temp 属性:MERGE(tom:Person id:'Tom Jones') ON CREATE set tom.temp_bool = true ON MATCH set tom.temp_bool = false WITH tom, tom.temp_bool AS result REMOVE tom.temp_bool RETURN result;【参考方案2】:

在这样的简单合并案例中,最多可以创建一个节点,实现您正在寻找的更简洁的方法可能是检查结果统计信息。如果使用 Bolt API,您应该检查一下:

results.consume().counters.nodes_created = 1

【讨论】:

以上是关于Neo4J 在 Cypher 中创建临时变量的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j 双向关系

Neo4j - 使用标题加载CSV的语法

Neo4j 第三篇:Cypher查询入门

Neo4j/Cypher 测试数据请求

neo4j cypher 节点可以模糊匹配么

在 Neo4J 中监控 CYPHER 查询性能