我正在尝试编写一个查询,该查询带有四个参数,这些参数都是id的列表,并且应该过滤结果。
我有一个称为KnowledgeEntry的节点,上面附加了多个KnowledgeRecords
(:KnowledgeEntry)-[:CONTAINS]->(:KnowledgeRecord)
KnowledgeRecords每个与位置,社区,功能或OrganizationalUnit类型的节点都有四种类型的关系,它们都具有id属性。
如果它们具有一个或多个与位置,社区,功能或OU相关的知识记录,并且ID与给定列表(参数)中的一项匹配,我想检索所有知识记录。
这是我到目前为止想出的:
MATCH (knowledgeEntry:KnowledgeEntry)-[relationship]-(:KnowledgeEntry)
WHERE EXISTS {
MATCH (knowledgeEntry)-[:CONTAINS]->(:KnowledgeRecord)-[:BASED_AT]->(loc:Location)
WHERE loc.id IN $filters.locationIds
}
RETURN relationship, knowledgeEntry;
这仅在设置了所有使用的参数后才有效。例如,如果$ filters.locationIds没有条目或为null,则应忽略where语句。我用CASE语句和apoc.when尝试过此操作,但没有成功。
在为OrganizationalUnit添加OR ORISTS时,出现错误“应该至少有一个模式表达式”
MATCH (knowledgeEntry:KnowledgeEntry)-[relationship]-(:KnowledgeEntry)
WHERE EXISTS {
MATCH (knowledgeEntry)-[:CONTAINS]->(:KnowledgeRecord)-[:BASED_AT]->(loc:Location)
WHERE loc.id IN $locationIds
}
OR EXISTS {
MATCH (knowledgeEntry)-[:CONTAINS]->(:KnowledgeRecord)-[:RELEVANT_FOR_EMPLOYEES_WITH]->(ou:OrganizationalUnit)
WHERE ou.id IN $organizationalUnitIds
}
RETURN relationship, knowledgeEntry;
答案 0 :(得分:0)
当布尔表达式中有多个existential subqueries时,您似乎遇到了neo4j错误。
此查询结合了您的两个子查询,可能对您更好:
MATCH (knowledgeEntry:KnowledgeEntry)-[relationship]-(:KnowledgeEntry)
WHERE EXISTS {
MATCH (knowledgeEntry)-[:CONTAINS]->(:KnowledgeRecord)-[:BASED_AT|RELEVANT_FOR_EMPLOYEES_WITH]->(x)
WHERE
(x:OrganizationalUnit AND x.id IN $organizationalUnitIds) OR
(x:Location AND x.id IN $locationIds)
}
RETURN relationship, knowledgeEntry;