繁体   English   中英

Neo4J Cypher排除连接到特定节点的节点

[英]Neo4J Cypher Exclude nodes that connect to a specific node

我正在尝试查找未连接到特定节点的所有节点。 我有一个应用程序,学生可以在作业中发现故事中的主题,然后撰写摘要。 然后,其他学生对这些说明进行同行评议。 我的数据如下所示:

Assignment-hasTheme->Theme-hasChild->Theme
Annotation-theme->Theme
Explication-owner->User
Explication-annotation->Annotation
PeerReview-explication->Explication

作为应用程序的一部分,当用户必须进行同行评审时,我必须找到其他用户编写的所有说明。 在我看来,这个查询应该可以工作:

MATCH
  (u),
  (a)-[:hasTheme]->(:Theme)
     -[:hasChild*]->(:Theme)
     <-[:theme]-(ann:Annotation)
     <-[:annotation]-(e:Explication)
OPTIONAL MATCH
  (e)<-[:explication]-(p:PeerReview)
WHERE id(a)=7 AND id(u)=4
  AND (e)-[:owner]->(u)
RETURN e, count(e) AS explicationCount
ORDER BY explicationCount ASC

问题是它没有:我得到了所有用户编写的所有说明。 这包括用户编写的说明。 谁能告诉我如何排除那些?

问题在于WHERE子句仅与另一个子句相关联...前面的MATCHOPTIONAL MATCHWITH 在您的查询中,它与OPTIONAL MATCH关联。

如果您知道这一点重新阅读了查询,则可以看到第一个MATCH没有WHERE子句,因此它与所有分配和所有用户都匹配,找到所有重复项。

然后,它进行可选匹配以在给定的分配和用户ID上获得:PeerReviews匹配,其中:PeerReviews所有者是具有给定ID的用户。 WHERE仅影响匹配的:PeerReviews (变量p )。

我可以看到其他几件事...您在模式中匹配的:Annotations上引入了变量ann ,对于: PeerReview了变量p ,但实际上在查询中并没有对它们进行任何处理。 这也使您的OPTIONAL MATCH无法使用,您不会返回或操作匹配的:PeerReviews

我的建议是删除这些变量并完全删除您的OPTIONAL MATCH

MATCH
  (u),
  (a)-[:hasTheme]->(:Theme)
     -[:hasChild*]->(:Theme)
     <-[:theme]-(:Annotation)
     <-[:annotation]-(e:Explication)
WHERE id(a)=7 AND id(u)=4
  AND (e)-[:owner]->(u)
RETURN e, count(e) AS explicationCount
ORDER BY explicationCount ASC

如果您确实想添加OPTIONAL MATCH并使用匹配的:PeerReview ,请确保它位于影响MATCHWHERE下方,如下所示:

MATCH
  (u),
  (a)-[:hasTheme]->(:Theme)
     -[:hasChild*]->(:Theme)
     <-[:theme]-(:Annotation)
     <-[:annotation]-(e:Explication)
WHERE id(a)=7 AND id(u)=4
  AND (e)-[:owner]->(u)
OPTIONAL MATCH
  (e)<-[:explication]-(p:PeerReview)
RETURN e, count(e) AS explicationCount, p
ORDER BY explicationCount ASC

编辑

响应评论时,期望的结果是每个:Explication和所有链接的:PeerReviews的计数,您可以使用以下查询:

MATCH
  (u),
  (a)-[:hasTheme]->(:Theme)
     -[:hasChild*0..]->(:Theme)
     <-[:theme]-(:Annotation)
     <-[:annotation]-(e:Explication)
WHERE id(a)=7 AND id(u)=4
  AND (e)-[:owner]->(u)
OPTIONAL MATCH
  (e)<-[:explication]-(p:PeerReview)
RETURN e, count(p) as peerReviewCount
ORDER BY peerReviewCount ASC

编辑

更新了上面的查询,因此它将在父主题上找到注释,而不仅仅是子主题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM