【问题标题】:Toggle relationship in Neo4J在 Neo4J 中切换关系
【发布时间】:2021-05-25 16:22:37
【问题描述】:

我正在尝试在 Neo4J 中实现关注/取消关注。我想写一个查询来切换两个节点之间的关系。

我目前有以下查询:

neoSession.writeTransaction(tx => tx.run('MATCH (me:User), (other:User) WHERE ID(me) = $me AND ID(other) = $other OPTIONAL MATCH (me)-[af:FOLLOWS]->(other) CALL apoc.do.when(af IS NULL, CREATE (me)-[f:FOLLOWS]->(other), DELETE af)', { me: req.user_id, other: req.body.user, datetime: Date.now() }));

美化查询:

MATCH (me:User), (other:User) 
  WHERE ID(me) = $me AND ID(other) = $other 
OPTIONAL MATCH (me)-[af:FOLLOWS]->(other) 
CALL 
  apoc.do.when(
    af IS NULL, 
    CREATE (me)-[f:FOLLOWS]->(other), 
    DELETE af
  )

但这会导致错误

Neo4jError: Invalid input '>' (line 1, column 169 (offset: 168))

"MATCH (me:User), (other:User) WHERE ID(me) = $me AND ID(other) = $other OPTIONAL MATCH (me)-[af:FOLLOWS]->(other) CALL apoc.do.when(af IS NULL, CREATE (me)-[f:FOLLOWS]->(other), DELETE af)"

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    apoc.do.when() 的查询(最后两个参数)必须是字符串,因此请分别引用它们。

    此外,为了让每个查询都使用这些变量,您需要在参数映射中将这些变量作为第四个参数传递。

    每个条件查询都必须返回某些内容,否则将不会产生任何行,之后的任何内容都将是空操作。

    调用必须YIELD value,所以它需要存在,最后,查询不能以过程调用结束,所以你需要返回一些东西。

    这个应该可以的,你可以根据需要调整它:

    MATCH (me:User), (other:User) 
      WHERE ID(me) = $me AND ID(other) = $other 
    OPTIONAL MATCH (me)-[af:FOLLOWS]->(other) 
    CALL 
      apoc.do.when(
        af IS NULL, 
        "CREATE (me)-[f:FOLLOWS]->(other) RETURN f", 
        "DELETE af RETURN null as f",
        {me:me, af:af}
      ) YIELD value
    RETURN value.f as f
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多