繁体   English   中英

在 Neo4j 图形数据库上使用 Cypher 展开数组并与其他节点匹配

[英]Unwind array and match with other nodes using Cypher on Neo4j graph database

我正在使用 GRANDstack 在 Neo4j 图形数据库之上创建一个应用程序,我正在努力编写一个展开属性数组、匹配一些 ID、拉回与 ID 关联的名称并将它们重新打包到新数组中的查询。

本质上,我有Memory节点(Mems)和Person节点(Person),它们的关系如下:(Mems)-[WITH]->(Person)。 即,您可以拥有一个 memory 与多人在一起的东西。 Mems 节点包含一个 personID 属性,该属性是一个 ID 数组,并且图形数据库中的关系是根据 Mems 节点中与 Person 节点中的 personID 匹配的 personID 数组构建的。

我试图实现的结果如下所示,但是我还没有找到从 Person 节点返回昵称的方法:

在此处输入图像描述

我用来生成上述查询的查询如下:

MATCH (m:Mem)-[WITH]->(p:Person)
WHERE m.personID IS NOT NULL
UNWIND m.personID as personID
CALL {
    WITH personID
    MATCH (p:Person)
    WHERE personID = p.personID
    RETURN p.nickname
}
RETURN m.mem, m.date, personID, p.nickname

我认为它接近我所需要的,但我只是无法弄清楚我可以返回与 personID 关联的昵称的最后一点。 这可能是APOC更有能力做的事情?

[更新]

这应该适合你:

MATCH (m:Mem)-[:WITH]->(p:Person)
WHERE p.personID IN m.personID
RETURN m.mem, m.date, p.personID, p.nickname

另外,请注意,如果要查询WITH关系类型,则关系模式必须使用:WITH而不是WITH

附录

当然,既然你有WITH关系,你应该考虑删除多余的m.personID属性。 您应该以这种方式在没有m.personID的情况下获得相同的结果:

MATCH (m:Mem)-[:WITH]->(p:Person)
RETURN m.mem, m.date, p.personID, p.nickname

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM