根据条件,创建节点和 return 值

Base on condition, create node and return value

在我的 neo4j 数据库中,我有 2 种节点类型:

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

以下查询应该满足您的要求。

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 并执行创建语句。

(技巧参考。http://www.markhneedham.com/blog/2014/08/22/neo4j-load-csv-handling-empty-columns/