Neo4j:你可以在退回时为资源设置额外的数据吗?

时间:2016-03-09 12:55:30

标签: neo4j cypher

我有User个节点,然后有一堆与其他节点的关系。

除了返回User之外,我还需要一些关于某些关系的汇总数据,followingfollowers等。

目前,我分别返回User和这些额外的属性,然后在我的应用程序中,我必须将额外的属性合并到我的用户对象中。

match (user:User {id:1234})
optional match ()<-[f:Follows]-user
with user, count(f) as following
optional match ()-[f:Follows]->user'
with user, following, count(f) as followers
return user, followers, following

结果是

user         | following | follows
----------------------------------
User {       | 10        | 30 
  id:1234,   |           |
  name:foo   |           |
}            |           |

然后我会得到结果,并将followingfollows混合到User对象中。

然而,如果密码可以为我做这件事,那会更简单,更少的代码,所以它会返回一个用户&#39;对象...

 user       
----------------------------------
User { 
  id:1234,
  name:foo,
  following:10,
  follows:30
}

但是,我不希望这些是针对用户资源保存的,只是在查找时计算出来。

知道这是否可行?我看了一下Collect,但我看不到在返回时将额外数据附加到现有资源的方法。

1 个答案:

答案 0 :(得分:1)

Cypher可以返回任意属性映射:

match (user:User {id:1234})
optional match ()<-[f:Follows]-user
with user, count(f) as following
optional match ()-[f:Follows]->user
with user, following, count(f) as followers
return { id: user.id, name: user.name, following: following, followers: followers }

但是,如果你的用户携带很多属性,我不确定这是否方便。