在我的neo4j数据库中,我有两种节点类型:
public class Warrior
{
public string Id{get;set}
public string Name{get;set;}
}
public class Weapon
{
public string Id{get;set;}
public string Name{get;set;}
}
我希望我的查询具有与此相同的功能:
var warrior = Match(warrior.Id == 1)
var weapon = Match(weapon.Id == 2)
if (warrior == null)
return 0;
if (weapon == null)
return 1;
CreateConnection(warrior-[:HAS]->Weapon)
return 2;
谢谢。
P / S:接受Neo4j或Neo4jClient查询,我可以将它们互相转换。
答案 0 :(得分:1)
以下查询应该执行您所需的操作。
optional match (warrior:Warrior) where warrior.id=1 with warrior
optional match (weapon:Weapon) where weapon.id=2 with warrior,weapon,
case when exists(warrior.id) and exists(weapon.id) then 2 when exists(weapon.id) then 1 else 0 end as output
foreach(temp in case when output=2 then [1] else [] end |
create (warrior)-[:Has]->(weapon)
)
return warrior,weapon
我们使用可选匹配而不是匹配,这样如果匹配不成功,查询就不会失败。
我们使用case语句来检查warrior或weapon的变量的ID值是否存在,并将结果值(0或1或2)存储在输出变量中。
接下来,我们使用foreach循环案例技巧来检查输出是否具有值2并执行create语句。
(诀窍的参考。http://www.markhneedham.com/blog/2014/08/22/neo4j-load-csv-handling-empty-columns/)