![](/img/trans.png)
[英]Cypher: Returning node relationships and properties for all nodes in a collection
[英]Cypher: Returning all relationships between nodes in a collection
我非常简单地尝试让Cypher输出集合中节点之间或匹配节点之间的所有关系。
我已经阅读了关于SO的几个解决方案,但是没有一个对我有用。
MATCH (p:Paper {paper_id: '29912657'})
CALL algo.pageRank.stream(null, null, {direction: "BOTH",
sourceNodes: [p]})
YIELD nodeId, score
WITH p, nodeId, score ORDER BY score DESC
LIMIT 25
MATCH (n)
WHERE id(n) = nodeId
WITH n, score, collect(n) AS c
MATCH (n)-[r:Cites]->(m)
WHERE m in c
RETURN r
在第一段代码中,我在具有特定“ paper_id”属性的节点上运行个性化页面排名。 然后,我按分数对结果进行排序,并获得前25个结果。
我尝试了第二个代码块的许多变体,但均未成功。 我正在尝试MATCH
集合c
节点之间存在的所有关系,并RETURN
它们。 当我运行它时,我得到一个空的响应。 我怀疑MATCH (n)-[r:Cites]->(m)
行有问题,因为如果我尝试RETURN
其他变量,例如n
,我仍然会得到一个空响应。 删除该行并RETURN
n
会得到除查询节点p
之外的前24个得分节点。
如果我尝试使用OPTIONAL MATCH
而不是OPTIONAL MATCH
, MATCH
得到25个null
值的列表。
我正在使用Neo4j版本3.4.5。
任何帮助表示赞赏!
您有一个正确的想法,收集并匹配集合中的节点,但是您遇到了聚合问题。
进行聚合时,非聚合变量将成为分组关键字,即聚合的上下文。
看这行:
WITH n, score, collect(n) AS c
这要问的是,每n
和一个score
给我该n
的集合。 您每n
将有一行,并且每个集合将是该n
单个集合。
为了拥有完整的节点集合,但每行只保留一个节点,您需要先收集节点然后再退回到行中(我们可以在此处省略分数,因为您不会在第二部分中使用它)查询。
... // since you already have the nodes you want no need to re-match to them
WITH collect(p) as nodes
UNWIND nodes as p // let's just keep the variable consistent here
// we now have each `p` and the full collection of nodes
MATCH (p)-[r:Cites]->(m)
WHERE m in nodes
RETURN r
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.