我必须编写一个密码查询,该查询可以根据来自以下代码所示列表的属性来过滤节点。
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除外,“这将始终在列表中”)。我不知道如何查询,以忽略那些不在列表中。
答案 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