根据条件,创建节点和返回值

时间:2016-06-08 13:28:06

标签: neo4j neo4jclient

在我的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查询,我可以将它们互相转换。

1 个答案:

答案 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/