【问题标题】:Cypher, how do I use MATCH on a result without messing up the original resultCypher,我如何在结果上使用 MATCH 而不会弄乱原始结果
【发布时间】:2015-01-23 21:45:27
【问题描述】:

我会尽量解释清楚,我写的东西也很可能不是我想做的事情的好方法,在这种情况下,我会很感激右边的一些指示方向。

我想要做的是创建一个节点:挂起并创建与每个节点的关系:定义数组中的用户,然后根据其中一个节点上的 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

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

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

    然后,如果您想创建从用户 1234 和 5678 到 Hang 的 [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 之间的 [member] 关系上设置 founder=1status=1

    【讨论】:

    • 不错!我在考虑条件 SET,但不太确定如何让它像你一样整洁。这正是我一直在寻找的方法。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多