密码条件检查(neo4j)

Condition checking in cypher (neo4j)

我运行下面的代码。如果它与我的“u”节点存在关系,我想从 USER_PHONE 节点获取“phone”属性。但我无法分配变量来获取它。 如果我将第一行固定为:(phone)<--(u:USER)-[:friend]-(p:USER)-[i:interested_in]->(p0:INTEREST{name:'Tiếng Anh'})。 然后对案例中满足条件if((u)-->(:USER_PHONE))的节点重复两次return结果。有人可以帮助我吗?

    match (u:USER)-[:friend]-(p:USER)-[i:interested_in]->(p0:INTEREST{name:'Tiếng Anh'})
    return id(u), u.FB_ID, sum(toInteger(i.strength)*p.ai_pagerank2) as CII, 
    CASE u
      WHEN (u)-->(phone:USER_PHONE) THEN phone.phone
      ELSE NULL
    END as num_phone order by num_phone ASC limit 100

这是我得到的错误

PatternExpressions are not allowed to introduce new variables: 'phone'. (line 4, column 15 (offset: 183))
    "  WHEN (u)-->(phone:USER_PHONE) THEN phone.phone"

this is the error i got

您可以进行“可选匹配”。这是关于它的文档: https://neo4j.com/docs/cypher-manual/current/clauses/optional-match/

match (u:USER)-[:friend]-(p:USER)-[i:interested_in]->(p0:INTEREST{name:'Tiếng Anh'})
with u, i, p
optional match (u)-->(userPhone:USER_PHONE)
return id(u), u.FB_ID, sum(toInteger(i.strength)*p.ai_pagerank2) as CII, 
userPhone.phone as num_phone order by num_phone ASC limit 100

您不需要检查 phone 是否为空,因为如果 phone 号码不存在,它将 return 为空。