【发布时间】:2015-06-30 12:48:35
【问题描述】:
我有一个 neo4j 数据库来学习这种新奇的图形技术,并且我按照这种结构制作了节点
(n:NewsArticle) -[r:about_place]-> (l:Location)
现在我想要的有点复杂/令人费解(或者我似乎认为是这样),并且对 cypher 不熟悉,我无法用这种新语法完全表达自己。请多多包涵。
基本上我的文章标记有很多位置。现在,在某一天,我找到了所有标记有某个位置的文章。一旦我有了它们,现在对于那些文章,我想找出它们被标记的其他位置。
这段代码似乎做了我想要的。 (耶)
MATCH (n:NewsArticle{date:"Jun-30-2015"})-[]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(m:Location)
return n,m
在这一点上,我最终得到了 8 个位置和 132 篇新闻文章。
现在是棘手的部分。在我拥有的 132 篇文章中,大多数文章的 about_place 关系仅指向 8 个位置中的 1 个, 我不想要这个。我想在这个集合中找到与我找到的至少 2 个位置有关系的文章。
我想出了这个查询,
MATCH (n:NewsArticle{date:"Jun-30-2015"})-[]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(m:Location)
WITH m, count(r) as rel_cnt
WHERE rel_cnt > 2
MATCH (a:NewsArticle{date:"Jun-30-2015"})-[r:about_place]->(m:Location)
return a,m
它确实给了我一些结果,但它并没有达到我想要的效果。但是如果我将 a 更改为 n (参考前 2 个匹配语句),它会变成一个语法错误,尽管我觉得它应该给我想要的结果.
tl;dr 我不想看到只有一篇新闻文章指向它们的位置节点
【问题讨论】: