返回连接到所有(而不是任何)指定节点(Cypher/Neo4j)的内容



我正试图根据用户选择的术语返回内容节点。以下是我的密码查询:

MATCH 
(content:content)-[:TAGGED_WITH]-(term:term)
WHERE
term.UUID IN {includedTerms}
AND NOT term.UUID IN {excludedTerms}
RETURN DISTINCT content.whatever

其中,{includedTerms}是要包括的术语的UUID的数组。

问题是,它返回的是连接到任何包含术语节点的内容,而不是连接到每个包含术语节点上的内容。

我意识到查询返回的正是我告诉它的内容。问题是,我如何指定内容必须使用用户选择的每个(而不是任何)术语节点进行标记?

非常感谢-如果有任何需要澄清的地方,请告诉我。

也许使用WITH可以有所帮助:

MATCH 
(content:content)-[:TAGGED_WITH]-(term:term)
WHERE
term.UUID IN {includedTerms}
AND NOT term.UUID IN {excludedTerms}
WITH content, count(*) as connectedTerms
WHERE connectedTerms = {_included_terms_size_}
RETURN DISTINCT content.whatever

我不理解NOT term.UUID IN {excludedTerms}的用法,但您可以根据需要编辑以下查询。

以下查询将仅使用具有所需includedTerms集合中的UUIDs属性的term节点。

MATCH (term:term) 
WHERE term.UUID IN [includedTerms] 
WITH collect(term) AS ms 
MATCH (content:content)-[r:TAGGED_WITH]->(x) 
WHERE x IN ms 
WITH content, count(r) AS rs,ms 
WITH collect(content) AS ns, collect(rs) AS rss, length(ms) AS mss 
RETURN [t IN range(0,length(ns)-1) 
WHERE rss[t]=mss | ns[t]] AS result

最新更新