如何通过Neo4j中的节点属性同步过滤两个不同的列表?

时间:2018-11-28 14:03:18

标签: neo4j cypher

更复杂的Cypher查询的结果是节点列表和关系列表,其中一个列表的每个位置/行在内容方面与另一列表的相同位置/行相关。该关系仅由两个列表中的位置组成,相应元素之间没有图。

List

因为我需要通过节点的属性过滤两个列表,所以我将两个列表合并在一个映射中,并尝试通过list comprehension来实现我的意图。

MATCH
  <complex query>
WITH collect(labelA) AS nodesList, collect(relation) AS relationList
WITH {nodes:nodesList, relations:relationList} AS data
WITH [x IN data WHERE x.nodes.attributName <> „text“] AS filteredData
RETURN filteredData;

在第5行中导致以下错误是可以理解的。

  

Neo.ClientError.Statement.TypeError:类型不匹配:应该是地图,但是列表{(4538063),(4538063),(4538063)}

从技术的角度来看,当我将x.nodes部分展开之前,它在行中起作用,但是我失去了对第二张表的依赖。 那么如何通过第一个列表的node属性同步过滤两个列表?

1 个答案:

答案 0 :(得分:1)

您有一个成对的列表,因此您应该这样收集它们,然后将它们过滤为单个项目。

我的意思示例...

MATCH
  <complex query>
WITH COLLECT({node:labelA, relation:relation}) AS data
// or you can do
// WITH COLLECT([labelA, relation]) AS data
WITH filter(x IN data WHERE x.node.attributName <> "text") AS filteredData
RETURN filteredData;