我想写一个查询;
实际上,这是允许程序的一个用户“阻止”该程序的另一个用户,无论这两个用户之前是否有任何类型的关系(可以有任意数量的关系)。对于查询的一半,如果存在,则可选地返回关系;
MATCH (a:user {name: {aParam})
OPTIONAL MATCH (a) -[r]- (b:user {name: {bParam})
RETURN type(r), a
对于查询的另一半,更新两个节点之间的关系(假设它已经存在);
MATCH (a:user {name: {aParam}) <- [r:originalRelationship] - (b:user {name: {bParam})
WITH a, r, b
MERGE (a) - [:updatedRelationship] - (b)
WITH r
DELETE r
但是结合这两个我还没有生成一个工作示例,我尝试将它们组合在一起,但弗兰肯斯坦并没有活过来;
MATCH (a:user {name: {aParam})
OPTIONAL MATCH (a) - [r] - (b:user {name: {bParam})
WITH a, b, r
MERGE (a) - [:block] -> (b)
WITH r
DELETE r
有人可以在这里指出我的错误并指出正确的方向吗?
由于您涉及多个关系,并且您想删除所有现有关系并将其替换为 Blocked,您可以尝试以下操作:
Match (p1:Person{name:"hj"}),(p2:Person{name:"bg"})
OPTIONAL Match (p1)-[r]->(p2) where TYPE(r)<>"Blocked"
MERGE (p1)-[:Blocked{blocked: True}]->(p2)
DELETE r
return *
保留以下部分以防它对某人有帮助。如果您只有 1 种类型的关系,并且只想更新值,则可以使用以下命令:
您可以将Merge子句与ON MATCH和ON CREATE选项一起使用。
由于你没有明确指定节点和关系结构,我再举一个例子。考虑 2 Person 节点,其中字段“name”唯一标识该人。
如果不存在,则查询会创建关系,如果它已经存在,您可以指定要更新的字段。
Match (p1:Person{name:"hj"}),(p2:Person{name:"bg"})
Merge (p1)-[r:originalRelationship]->(p2)
ON CREATE SET r.created = True
ON MATCH SET r.updated = True
return p1,p2,r
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句