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
Neo4J全局聚合计数,而不是每个子图_Neo4j_Cypher - Fatal编程技术网

Neo4J全局聚合计数,而不是每个子图

Neo4J全局聚合计数,而不是每个子图,neo4j,cypher,Neo4j,Cypher,以下是我的数据模型(概念上): 数据: 还有几个例子: "John Smith" seen at event "Event A" "John Smith" seen at event "Event B" "John Smith" seen at event "Event C" "Jane Smith" seen at event "Event A" "Jane Smith" seen at event "Event B" "Jane Smith" seen at event "Event C"

以下是我的数据模型(概念上):

数据:

还有几个例子:

"John Smith" seen at event "Event A"
"John Smith" seen at event "Event B"
"John Smith" seen at event "Event C"
"Jane Smith" seen at event "Event A"
"Jane Smith" seen at event "Event B"
"Jane Smith" seen at event "Event C"
我想找出一起出现超过2次的人,并检索人和事件节点以及关系

MATCH (p:Person)-[rel1:SEEN_AT]->(e:Event)<-[rel2:SEEN_AT]-(p1:Person) 
WITH p, rel1, e, rel2, p1, count(e) AS total_events_together 
RETURN  p, rel1, e, rel2, p1, total_events_together

MATCH(p:Person)-[rel1:SEEN_AT]->(e:Event)在一个id大于另一个id的事件中,可以对每对人的事件进行计数,这样就不会重复计数。不只是获取计数,而是将事件和每个关系收集到一个单独的对象中。使用集合的大小仅获取大于两个的关节事件

MATCH (p:Person)-[rel1:SEEN_AT]->(e:Event)<-[rel2:SEEN_AT]-(p1:Person) 
WHERE id(p) > id(p1)
WITH p, p1, collect( {event: e, rel1: rel1, rel2: rel2}) AS total_events_together
WHERE size (total_events_together) > 2
RETURN p, p1, total_events_together
MATCH(p:Person)-[rel1:SEEN\u AT]->(e:Event)id(p1)
对于p,p1,收集({event:e,rel1:rel1,rel2:rel2})作为总事件
其中大小(总事件数)>2
返回p、p1、事件总数

谢谢!成功了!我从来不知道collect函数可以容纳自定义对象(在运行时创建)。
MATCH (p:Person)-[rel1:SEEN_AT]->(e:Event)<-[rel2:SEEN_AT]-(p1:Person) 
WITH p, rel1, e, rel2, p1, count(e) AS total_events_together 
RETURN  p, rel1, e, rel2, p1, total_events_together
MATCH (p:Person)-[rel1:SEEN_AT]->(e:Event)<-[rel2:SEEN_AT]-(p1:Person) 
WHERE id(p) > id(p1)
WITH p, p1, collect( {event: e, rel1: rel1, rel2: rel2}) AS total_events_together
WHERE size (total_events_together) > 2
RETURN p, p1, total_events_together