Neo4j 如何正确调用apoc.map.groupBy()?

Neo4j 如何正确调用apoc.map.groupBy()?,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,当我称之为: MATCH (node:Wallet) WITH collect(node) AS nodes CALL apoc.algo.pageRankWithConfig(nodes,{types:'SendTo'}) YIELD node, score WITH nodes, collect({id:toString(id(node)),score:score}) as ranks call apoc.map.groupBy(ranks,'id') as ranksById CALL a

当我称之为:

MATCH (node:Wallet)
WITH collect(node) AS nodes
CALL apoc.algo.pageRankWithConfig(nodes,{types:'SendTo'}) YIELD node, score
WITH nodes, collect({id:toString(id(node)),score:score}) as ranks
call apoc.map.groupBy(ranks,'id') as ranksById
CALL apoc.algo.closeness(['SendTo'],nodes,'INCOMING') YIELD node, score
RETURN node, ranksById[toString(id(node))] as rank, score
将引发此错误:

Invalid input 'a': expected whitespace, comment, result fields of a procedure, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, CALL, RETURN, UNION, ';' or end of input (line 5, column 35 (offset: 224))
"call apoc.map.groupBy(ranks,'id') as ranksById"
                                   ^
当我试着这样称呼它时:

MATCH (node:Wallet)
WITH collect(node) AS nodes
CALL apoc.algo.pageRankWithConfig(nodes,{types:'SendTo'}) YIELD node, score
WITH nodes, collect({id:toString(id(node)),score:score}) as ranks
call apoc.map.groupBy(ranks,'id') YIELD values
CALL apoc.algo.closeness(['SendTo'],nodes,'INCOMING') YIELD node, score
RETURN node, values[toString(id(node))] as rank, score 
错误是:
没有为此数据库实例注册名为'apoc.map.groupBy'的过程。请确保过程名称拼写正确,并且过程已正确部署。

当我使用
调用apoc.help('apoc.map.groupBy')
进行检查时,该方法已注册,签名为
apoc.map.groupBy(value::LIST?OF ANY?,key::STRING?:(map?


如何正确调用apoc.map.groupBy?

这是因为
apoc.map.groupBy()
是一个函数,而不是一个过程。Neo4j 3.1引入了自定义用户函数(可以作为表达式内联调用,不需要调用或生成),因此许多过程被更改为函数,以获得更好的灵活性

将您的呼叫线路更改为与,如下所示:

WITH nodes, apoc.map.groupBy(ranks,'id') as values
...