返回连接到所有(而不是任何)指定节点的内容(Cypher/Neo4j)
我试图根据用户选择的术语返回内容节点。以下是我的密码查询:返回连接到所有(而不是任何)指定节点的内容(Cypher/Neo4j),neo4j,cypher,Neo4j,Cypher,我试图根据用户选择的术语返回内容节点。以下是我的密码查询: MATCH (content:content)-[:TAGGED_WITH]-(term:term) WHERE term.UUID IN {includedTerms} AND NOT term.UUID IN {excludedTerms} RETURN DISTINCT content.whatever 其中,{includedTerms}是要包括的术语的
MATCH
(content:content)-[:TAGGED_WITH]-(term:term)
WHERE
term.UUID IN {includedTerms}
AND NOT term.UUID IN {excludedTerms}
RETURN DISTINCT content.whatever
其中,{includedTerms}
是要包括的术语的UUID数组
问题在于,它返回的是连接到任何包含的术语节点的内容,而不是连接到每个包含的术语节点的内容
我意识到查询返回的正是我告诉它的内容。问题是如何指定内容必须使用用户选择的每个(而不是任何)术语节点进行标记
非常感谢-如果有任何需要的澄清,请告诉我。我无法理解{excludedTerms}中
NOT term.UUID的用法,但您可以根据需要编辑以下查询
下面的查询将仅使用术语
节点,这些节点将具有所需includedTerms
集合中的UUID
属性
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
使用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部分的目的是指示不应返回连接到这些术语的内容。通过google drive访问示例数据集。我以前从来没有做过图表的要点,但我可以研究一下。这似乎有效,但我不明白为什么。count(*)和第二个WHERE子句在做什么?感谢您的帮助。count就像sql中的GroupBy:您将拥有内容,计数将是它所连接的术语数。第二个where子句只是检查连接项的数量是否符合预期