Neo4j:用于基于属性列表进行过滤的密码

时间:2020-06-09 11:19:16

标签: filter neo4j cypher

我必须编写一个密码查询,该查询可以根据来自以下代码所示列表的属性来过滤节点。

UNWIND [{a_id:'1001', c_id:'1001'}] as row
match (a:Assembly)-[:RECIPE]->(c:Component)
where a.id = row.a_id and c.id = row.c_id and c.name = c_name and c.manu = c_manu
return c

我的问题是,此代码假定列表中的所有属性都已发送给我,并且如果列表中的所有属性均不存在,则返回空值。但是,用户可以从组件中筛选属性的一种或任何组合(a_id除外,“这将始终在列表中”)。我不知道如何查询,以忽略那些不在列表中。

1 个答案:

答案 0 :(得分:0)

这应该有效:

UNWIND [{a_id:'1001', c_id:'1001'}] as row
MATCH (a:Assembly)-[:RECIPE]->(c:Component)
WHERE
  (NOT EXISTS(row.a_id) OR row.a_id = a.id) AND
  (NOT EXISTS(row.c_id) OR row.c_id = a.id) AND
  (NOT EXISTS(row.c_name) OR row.c_name = c.name) AND
  (NOT EXISTS(row.c_manu) OR row.c_manu = c.manu)
RETURN c