如何匹配所有匹配连接上的节点?

时间:2014-12-02 15:34:44

标签: neo4j cypher

我想返回与p1:Encounter具有相同ICD9DX代码的所有遭遇(p2)。因此,如果p1有3个ICD9DX代码,我想找到具有相同3个代码的p2节点。最后,我想知道如何编写查询,以便它只返回具有相同的三个代码的p2节点以及如何编写它以便它将返回具有的节点至少这三个代码。我已经尝试从已经回答的其他问题中解决这个问题,但到目前为止还没有成功。以下是我最新的迭代。

MATCH path=((p1:Encounter {PatientAccount: '1003149560'})-[:HasICD9Dx]-(i:ICD9DX)-[:HasICD9Dx]-(p2:Encounter))
WHERE ALL(p1 in tail(nodes(path)) WHERE ()-[:HasICD9Dx]->p1) 
RETURN p2

我是Neo4j的新手,所以对逻辑的任何评论都会有所帮助。我已经看过其他使用WITH处理类似主题的帖子,但我很难理解WITH子句。也许我只需要深入研究并阅读手册。

1 个答案:

答案 0 :(得分:1)

我终于明白了(似乎)。返回至少匹配与p1相关的代码的遭遇:

MATCH (p1:Encounter {PatientAccount: '1002844934'})-[:HasICD9Dx]-(i:ICD9DX)
WITH COUNT(i) AS codes, p1
MATCH (p2:Encounter)-[:HasICD9Dx]-(i:ICD9DX)-[:HasICD9Dx]-(p1)
WITH count(i) as foundCodes, codes, p2
WHERE foundCodes = codes
MATCH (p2)-[:HasICD9Dx]-(i:ICD9DX)
WITH count(i) as totalCodes, codes, p2
RETURN p2.PatientAccount, totalCodes

返回与p1具有完全相同代码但没有更多代码的遭遇:

MATCH (p1:Encounter {PatientAccount: '1002844934'})-[:HasICD9Dx]-(i:ICD9DX)
WITH COUNT(i) AS codes, p1
MATCH (p2:Encounter)-[:HasICD9Dx]-(i:ICD9DX)-[:HasICD9Dx]-(p1)
WITH count(i) as foundCodes, codes, p2
WHERE foundCodes = codes
MATCH (p2)-[:HasICD9Dx]-(i:ICD9DX)
WITH count(i) as totalCodes, codes, p2
WHERE totalCodes = codes
RETURN p2.PatientAccount