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