Neo4j 在特定条件下,在创建节点时是否有建立关系的方法?密码3.5

Neo4j 在特定条件下,在创建节点时是否有建立关系的方法?密码3.5,neo4j,cypher,Neo4j,Cypher,我不熟悉Neo4j和graph数据库 我正在寻找一种方法来创建一个节点,同时将其连接到另一个匹配的节点,该节点有一个匹配某个参数的字段 下面是一张示意图来说明这一点: 假设我的参数是:params{friendNodeId:2} 在我的Cypher查询中,我想用其字段名称创建我的新节点:“我的全新节点”。然后,如果有一个节点具有uniqueId=$params.friendNodeId在该节点和我的新节点之间创建一个关系 我的方法是通过运行一个查询来优化整个过程,而不必在第二个查询中进行不必要

我不熟悉Neo4j和graph数据库

我正在寻找一种方法来创建一个节点,同时将其连接到另一个匹配的节点,该节点有一个匹配某个参数的字段

下面是一张示意图来说明这一点:

假设我的参数是
:params{friendNodeId:2}

在我的Cypher查询中,我想用其字段
名称创建我的新节点:“我的全新节点”
。然后,如果有一个节点具有
uniqueId=$params.friendNodeId
在该节点和我的新节点之间创建一个关系

我的方法是通过运行一个查询来优化整个过程,而不必在第二个查询中进行不必要的匹配来获得新创建的节点

如果你认为它毫无意义,不要犹豫,提出另一个建议


感谢您的帮助。

根据您在注释中的示例,如果节点创建是强制性的,但关系创建是可选的(取决于是否有匹配的节点),则您可以将创建移动到匹配之前:

CREATE (new:Node {uId: 4})
SET new.name = "name 4" 
WITH new
MATCH (other:Node {uId: $uniqueId})
CREATE (new)-[r:FRIEND]->(other) 
RETURN r

这似乎相当直截了当,到目前为止,您尝试了什么(在Cypher中),以及该结果对您不起作用吗?我尝试过;-)问题是,当我链接到的另一个节点不存在时,它最终不会创建我不想要的新节点(关系是可选的,创建是必需的)
:params{“ids”:[{“id”:1},{“id”:2},{“id”:3}
将$ids展开为id CREATE(n:node)SET n.uId=id.id,n.name=(“name”+id.id)
:params{“uniqueId”:0
MATCH(other:Node{uId:$uniqueId})CREATE(new:Node{uId:4}),(new)-[r:FRIEND]>(other)SET new.name=“name 4”RETURN r
I get
(无更改,无记录)
但如果my
$uniqueId
是现有节点的一部分,如
Node 2
,则
:params{uniqueId:2}
它工作得很好。它工作得很好:-D感谢您的帮助。因此,基本上,根据我从您的查询和cypher手册中所了解的内容,
with
关键字可以帮助我将数据从查询的一部分传递到另一部分,不是吗?是的,with是传递希望保留在范围内的变量的一种方法(任何其他变量都不在范围内),它是通过函数调用聚合和操作数据的好地方。