Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 使用cypherquery在neo4j中仅查找具有多个传入关系的节点_Graph_Neo4j_Cypher - Fatal编程技术网

Graph 使用cypherquery在neo4j中仅查找具有多个传入关系的节点

Graph 使用cypherquery在neo4j中仅查找具有多个传入关系的节点,graph,neo4j,cypher,Graph,Neo4j,Cypher,我有一个neo4j数据库来学习这种新型的图形技术,我按照这种结构制作了节点 (n:NewsArticle) -[r:about_place]-> (l:Location) 现在我想要的是有点复杂/复杂(或者我似乎认为是这样),而且我对cypher还不熟悉,无法用这种新语法完全表达自己。请容忍我 基本上,我有很多位置标记的文章。现在,对于给定的一天,我找到了所有标记有特定位置的文章。一旦我有了它们,现在对于这些文章,我想找出它们标记的其他位置 这段代码似乎符合我的要求。(耶) 在这一点上,

我有一个neo4j数据库来学习这种新型的图形技术,我按照这种结构制作了节点

(n:NewsArticle) -[r:about_place]-> (l:Location)
现在我想要的是有点复杂/复杂(或者我似乎认为是这样),而且我对cypher还不熟悉,无法用这种新语法完全表达自己。请容忍我

基本上,我有很多位置标记的文章。现在,对于给定的一天,我找到了所有标记有特定位置的文章。一旦我有了它们,现在对于这些文章,我想找出它们标记的其他位置

这段代码似乎符合我的要求。(耶)

在这一点上,我结束了8个地点和132篇新闻文章

现在是棘手的部分。在我的132篇文章中,大多数关于位置关系的文章只指向8个位置中的1个, 我不要这个。我希望在此集合中找到与我找到的至少两个位置有关系的文章

我提出了这个问题

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(参考前两个匹配语句),它将成为一个语法错误,尽管我觉得它应该会给出我想要的结果


tl;dr i不希望看到只有一篇新闻文章指向它们的位置节点

此查询应返回所有具有“Jun-30-2015”的
日期属性的
新闻文章
节点,这些节点具有
:about_-place
位置
印度的关系以及至少一个其他位置:

MATCH (n:NewsArticle {date:"Jun-30-2015"})-[:about_place]->(:Location {name: "India"})
MATCH (n)-[r:about_place]->(l:Location)
WITH collect(n) AS articles, l, count(r) AS num WHERE num > 2
RETURN l, articles, num
尝试:


您可能希望从结果中排除原始位置,因此需要在最终返回之前添加额外的筛选器。

找到了collect()语句的答案,该语句允许您通过WITH管道携带变量

MATCH (n:NewsArticle{date:"Jun-30-2015"})-[:about_place]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(loc:Location)
WITH loc,collect(n) as article, count(r) as num WHERE num > 2
RETURN loc,article

如果我最后返回n,l,它会给我一个错误(l未定义?)。我想查看所有满足条件的位置节点以及文章节点。
WITH
命令清除
WITH
语句中未指明的任何变量,因此如果您也想返回位置,您可以按照@ErnestoE的答案再次匹配它们,或者添加类似
COLLECT(l)的内容as locations
到上面带有
语句的
。如果您可以编辑您的答案以显示collect,我将接受它为正确答案-您可以从下面的我的答案复制查询-不过是您的答案向我展示了方法。所以我宁愿接受你的答案而不是我的编辑:添加了collect语句来包含acticles集合
MATCH (n:NewsArticle {date:"Jun-30-2015"})-[:about_place]->(:Location {name: "India"})
MATCH (n)-[r:about_place]->(l:Location)
WITH n, count(r) as num 
WHERE num > 2
MATCH (n)-[:about_place]->(l:Location)
RETURN n, l
MATCH (n:NewsArticle{date:"Jun-30-2015"})-[:about_place]->(l:Location{name:"India"})
MATCH (n:NewsArticle)-[r:about_place]->(loc:Location)
WITH loc,collect(n) as article, count(r) as num WHERE num > 2
RETURN loc,article