如何从用户定义的Neo4j函数返回对象

时间:2017-04-06 14:33:44

标签: neo4j user-defined-functions

我有一个像这样的复杂查询:

MATCH path = allShortestPaths( ... )
WITH path, reduce(x={
            specificStamp: "",
            specificCount: 0,
            ...
        },
        r IN relationships(path) |
            CASE WHEN ...
                THEN {
                    specificStamp: some-expr(x),
                    specificCount: another-expr(x),
                    ...
                }
            ...
            END
        ) AS pobj
ORDER BY pobj.specificStamp, pobj.specificCount
RETURN head(COLLECT(path)) AS path, pobj.specificStamp AS stamp, COUNT(*) AS cnt
ORDER BY length(path), stamp

真实代码中的逻辑更复杂,包括嵌套的CASE和许多复杂的THEN以及一些重复的表达式......

为简化问题,最好将reduce逻辑放入单独的函数中。但是Neo4J用户定义的函数只能返回一个值。

哪种类型的返回值对应于此cypher表达式:{specificStamp: "", specificCount: 0}

可能是Object?但根据documentation Object表示ANY类型。

可能是Map?但是哪个地图模板? Map<String,String>Map<String,Integer>

冲突

2 个答案:

答案 0 :(得分:0)

返回Map<String,Integer>Map<String,Object>

请参阅此有效类型:https://neo4j.com/docs/developer-manual/current/extending-neo4j/cypher-functions/#writing-udf

答案 1 :(得分:0)

Map<String,Object>已经足够了。

不需要Cypher查询中的其他类型转换。 用户函数的字符串字段为字符串。很久很久。