【发布时间】:2020-02-18 12:33:20
【问题描述】:
我正在尝试编写一个带有四个参数的查询,这些参数都是 id 列表并且应该过滤结果。
我有名为 KnowledgeEntry 的节点,其中附加了多个 KnowledgeRecords
(:KnowledgeEntry)-[:CONTAINS]->(:KnowledgeRecord)
KnowledgeRecords 每个都有四种与 Location、Community、Function 或 OrganizationalUnit 类型的节点的关系,它们都有一个 id 属性。
如果所有 KnowledgeEntries 具有一个或多个与位置、社区、功能或 OU 相关且 id 与给定列表(参数)中的一项匹配的 KnowledgeRecord,我想检索它们
这是我目前想出的:
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 试过了,但没有成功。
当为组织单位添加 OR EXISTS 时,我收到一个错误“应该至少有一个模式表达式”
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;
【问题讨论】:
标签: neo4j cypher neo4j-apoc