【发布时间】:2015-11-01 08:05:32
【问题描述】:
我需要使用 Neo4j Cypher 查询将标准系数引入以下 SDN 存储库方法:
@Query("MATCH ... ->(c) WHERE id(c) IN {criteriaIds} WITH ... vg.avgVotesWeight as weight RETURN sum(weight) as weight")
List<WeightedDecision> getChildDecisions(@Param("decisionId") Long decisionId, @Param("criteriaIds") List<Long> criteriaIds);
为了实现这样的事情:
MATCH ... ->(c)
WHERE id(c) IN {criteriaIds}
WITH ... (vg.avgVotesWeight * cCoefficient) as weight
RETURN sum(weight) as weight
其中cCoefficient 是criteriaIds 列表中某个标准的系数。因此,连同criteriaIds 列表,我想将标准系数列表传递给查询。
Сoefficients 不是强制性的。例如,criteriaIds 列表中的一个条件可以有系数,但另一个条件 - 没有。
现在我不知道如何将这些系数参数(对于criteriaIds 列表中的所有或某些条件)传递给我的方法并将其绑定到查询。
Neo4j/SDN/Cypher 可以吗?如果有,请举个例子。
更新
根据迈克尔的建议,我使用以下语法:
.... (vg.avgVotesWeight * (CASE WHEN c IS NOT NULL THEN coalesce({coefficients}[''+id(c)], 1.0) ELSE 1.0 END)) as weight ....
- 我需要检查
c不为空,所以我使用 CASE 语句 -
我需要将 long
id(c)转换为 String''+id(c)否则它会失败并出现以下异常:嵌套异常是 org.neo4j.cypher.CypherTypeException: Expected 138 to be a java.lang.String,但它是 java.lang.Long
另外,我必须将 Map<String, Double> coefficients 而不是 Map<Long, Double> coefficients 传递到我的 SDN 方法中。
有什么方法可以优化这种方法吗?例如避免类型转换或/并以更优雅的方式实现空指针验证?
【问题讨论】:
标签: neo4j cypher spring-data-neo4j