关系源节点内的返回关系计数

时间:2017-05-02 15:45:14

标签: neo4j cypher

我有一个节点,其中包含我需要的相关数据。该节点与多个节点有关系。我想返回节点,并将关系计数作为源数据的一部分。例如:

(:Person)-[:Traveled]->(:Country)

(John)-[:Traveled]->(USA)
                  ->(Japan)
                  ->(Spain)

普通英语:约翰前往美国,日本和西班牙

我想返回Person,使节点包含前往的国家/地区的数量:

{name:'John',..., numberOfCountriesTraveledTo: 3}

如何将count(:Country)的结果作为John中的字段附加?

更新

如果我和两个人(比如朋友)之间有关系怎么办?我需要它们之间的路径,包括Person节点,以便Person节点包括计数(Country)?这样:

(:Person)-[:Traveled]->(:Country)

(John)-[:Traveled]->(USA)
                  ->(Japan)
                  ->(Spain)

(Kate)-[:Traveled]->(Chile)
                  ->(France)

f=(Kate)-[:Friends]-(John)

返回f会产生一个带有起始节点的路径,如

{name:'Kate',..., numberOfCountriesTraveledTo: 2}

之类的结束节点
{name:'John',..., numberOfCountriesTraveledTo: 3}

我的目标是能够返回一条路径,其中包含与节点中国家/地区数量的关系。

1 个答案:

答案 0 :(得分:3)

您可以在结果的用户投影中添加numberOfCountriesTraveledTo作为附加属性。

MATCH (user:User {name: 'John'})-[:TRAVELED]->(country:Country)
RETURN user{.*, numberOfCountriesTraveledTo: count(country)}

更新 - 根据Op的要求添加第二个答案

MATCH (user:User {name: 'John'})<-[:FRIENDS]-(user2:User {name: 'Kate'})
RETURN user{.*, numberOfCountriesTraveledTo: size((user)-[:TRAVELED]->())},
       user2{.*, numberOfCountriesTraveledTo: size((user2)-[:TRAVELED]->())}

路径上的n朋友......

MATCH path=(:User {name: 'John'})<-[:FRIENDS*..10]-(:User {name: 'Kate'})
UNWIND nodes(path) as user
WITH user{.*, numberOfCountriesTraveledTo: size((user)-[:TRAVELED]->())} as user
RETURN collect(user) as users