在特定条件下在 Neo4j 中创建节点和边
Creating Node and Edge in Neo4j on Certain Conditions
我目前正在尝试将唯一位置列表添加到 Neo4j(合并)中。如果 Location 节点具有 OwnerId 的值,那么我想创建与匹配的 Owner 节点的关系并添加一个名为 ManagedLocation 的新标签。
public class Location
{
public string Name {get;set;}
public string Built {get;set;}
public long OwnerId {get;set;}
}
public class Owner
{
public long Id {get;set;
public string Name {get;set;}
}
我遇到的问题是 仅 添加 OwnerId 具有值的那些而忽略其余部分。答案可以使用 Neo4jClient 或原始 CYPHER 进行编码,我可以从那里解决剩下的问题。如有任何问题,请随时提出澄清
这是我目前的情况:
graphClient.Cypher
.Unwind(locs, "loc")
.Match("(t:Owner{ Id: loc.OwnerId}) RETURN t LIMIT 1")
.Merge("(l:Location {Name: loc.Name})")
.OnCreate()
.Set("l = loc")
.Create("(t)-[:Manages]->(l)")
.Set ("l = ManagedLocation")
.ExecuteWithoutResults();
这一切都与您的代码顺序有关,在未设置 OwnerId
的情况下 - MATCH
将失败 - 因此不会继续查询。您必须首先在位置上执行 MERGE
:
graphClient.Cypher
.Unwind(locs, "loc")
.Merge("(l:Location {Name: loc.Name})")
.OnCreate()
.Set("l = loc")
.With("l")
.Match("(t:Owner { Id: l.OwnerId})")
.Create("(t)-[:Manages]->(l)")
.Set("l:ManagedLocation")
.ExecuteWithoutResults();
附带说明 - 您可能希望关系的底部 .Create
也是 Merge
- 这样您就可以 运行 查询任意多次不创建重复关系。
我目前正在尝试将唯一位置列表添加到 Neo4j(合并)中。如果 Location 节点具有 OwnerId 的值,那么我想创建与匹配的 Owner 节点的关系并添加一个名为 ManagedLocation 的新标签。
public class Location
{
public string Name {get;set;}
public string Built {get;set;}
public long OwnerId {get;set;}
}
public class Owner
{
public long Id {get;set;
public string Name {get;set;}
}
我遇到的问题是 仅 添加 OwnerId 具有值的那些而忽略其余部分。答案可以使用 Neo4jClient 或原始 CYPHER 进行编码,我可以从那里解决剩下的问题。如有任何问题,请随时提出澄清
这是我目前的情况:
graphClient.Cypher
.Unwind(locs, "loc")
.Match("(t:Owner{ Id: loc.OwnerId}) RETURN t LIMIT 1")
.Merge("(l:Location {Name: loc.Name})")
.OnCreate()
.Set("l = loc")
.Create("(t)-[:Manages]->(l)")
.Set ("l = ManagedLocation")
.ExecuteWithoutResults();
这一切都与您的代码顺序有关,在未设置 OwnerId
的情况下 - MATCH
将失败 - 因此不会继续查询。您必须首先在位置上执行 MERGE
:
graphClient.Cypher
.Unwind(locs, "loc")
.Merge("(l:Location {Name: loc.Name})")
.OnCreate()
.Set("l = loc")
.With("l")
.Match("(t:Owner { Id: l.OwnerId})")
.Create("(t)-[:Manages]->(l)")
.Set("l:ManagedLocation")
.ExecuteWithoutResults();
附带说明 - 您可能希望关系的底部 .Create
也是 Merge
- 这样您就可以 运行 查询任意多次不创建重复关系。