Cypher,如何在不破坏原始结果的情况下对结果使用MATCH

时间:2014-11-25 18:45:43

标签: neo4j cypher

我会尝试尽可能多地提高意识,我写的东西也很可能不是我想要做的好方法,在这种情况下,我和#39; d欣赏正确方向的一些指示。

我想要做的是创建一个节点:挂起并创建与每个节点的关系:在定义的数组中的用户,之后,基于其一个节点上的fb_id匹配创建的关系之一。在该关系上设置一个属性并返回第一个节点:用户i匹配。

我在下面所做的就是我想要的所有内容,除了它返回具有匹配关系的用户而不是我最初匹配的用户。

如何制作它以便返回原始匹配的用户? (xxxx,zzzz)

 CREATE (hang:Hang {})
 WITH hang
 MATCH (users:User) WHERE users.fb_id IN [xxxx, zzzz]
 CREATE (users)-[:member {status: 0}]->(hang)
 WITH users, hang
 MATCH (users)-[r:member]->(hang) WHERE users.fb_id = xxxx
 SET r.founder = 1, r.status = 1
 RETURN users

1 个答案:

答案 0 :(得分:3)

我认为你有道理。我举了一个例子。以下是三位用户:

CREATE (:User {fb_id:1234}),
       (:User {fb_id:5678}),
       (:User {fb_id:9101});

然后,如果您要创建从用户1234和5678到挂起的[member]关系,但只为用户1234设置founder=1status=1,同时仍然返回两个用户:

CREATE (hang:Hang {name:'Some Hang'})
WITH hang
MATCH (users:User) WHERE users.fb_id IN [1234, 5678]
CREATE (users)-[r:member]->(hang)
SET r.founder = CASE WHEN users.fb_id = 1234 THEN 1 ELSE 0 END,
    r.status = CASE WHEN users.fb_id = 1234 THEN 1 ELSE 0 END
RETURN users;

最终返回用户1234和5678,但仅在用户1234和Hang之间的founder=1关系上设置status=1[member]