Neo4JClient 3.1 到 5.1 更新匹配两个节点并创建关系的查询

问题描述 投票:0回答:1

我正在努力更新使用 Neo4JClient v3.x 的代码以与最新的 Neo4J 服务器和 Neo4jClient v5.x 配合使用。

我的查询基本上会创建 2 个节点以及它们之间的关系。 如果任何节点或两个节点都不存在,则会沿着关系创建它们

旧工作查询:

query1 = client.Cypher
    .Match("(e1:Entity)", "(e2:Entity)")
    .Where("e1.Id={id1} and e2.Id={id2}")
    .WithParam("id1", id1)
    .WithParam("id2", id2)
    .WithParam("line", line)
    .Merge("(e1)-[r:REF {LINE:{line}}]->(e2)");

以上代码在新版本的Neo4j服务器/Neo4jClient中不起作用 我尝试修改它当前创建重复节点而不是唯一节点

query1 = client.Cypher
    .Create("(e1:Entity $id1)")
    .Create("(e2:Entity $id2)")
    .WithParam("id1",new { Id = id1 })
    .WithParam("id2", new { Id = id2 })
    .WithParam("line", line)
    .Create("(e1)-[r:REF {LINE:$line}\]->(e2)");

你能帮我将上面的第一个查询转换为在新版本中工作吗?

neo4jclient
1个回答
0
投票

您的第一个查询在开头执行

MATCH
,这永远不会有
CREATE
d
e1
e2
- 您需要使用
MERGE
来实现您所追求的目标。

此查询:

query1 = client.Cypher
    .Merge("(e1:Entity {Id: $id1})")
    .Merge("(e2:Entity {Id: $id2})")
    .Merge("(e1)-[r:REF {LINE:$line}]->(e2)")
    .WithParams(new { id1, id2, line });

应该做你真正想做的事。

如果

e1
e2
不在数据库中,则为
CREATE
d ;如果在数据库中,则为
MATCH
ed。

您可能需要考虑是否希望以相同的方式建立关系,在这种情况下,请将
.Create(...)

交换为

.Merge(...)

编辑:我在你原来的查询中注意到你实际上做了
MERGE

关系,所以我相应地更新了代码。

    

© www.soinside.com 2019 - 2024. All rights reserved.