我需要介绍的标准系数以下SDN库法与Neo4j的暗号查询:添加标准系数Neo4j的SDN方法/ Cypher支架查询
@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
列表传递给查询中的一个标准系数列表。
系数不是强制性的。例如,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语句 我需要投入很长的
id(c)
到字符串''+id(c)
,否则它会失败,出现以下异常:嵌套的异常是org.neo4j.cypher.CypherTypeException:预期138是java.lang.String,但它是一个java.lang.Long中
另外,我要通过Map<String, Double> coefficients
代替Map<Long, Double> coefficients
纳入我的SDN方法。
有什么办法来优化这种方法?例如避免类型转换或/和以更优雅的方式实现空指针验证?
谢谢您的回答。我是否需要将criteriaId和系数作为Key/Value传递给单个映射或作为分离的参数?还有什么是“.foo”? – alexanoid
好吧,我知道了..“foo”是系数是一个值的关键..但如何使用多个系数为不同的criteriaIds?如何使用criteriaId作为此Cypjher查询中的关键字? – alexanoid
我的意思是例如'coalesce({系数} .id(c),1.0)'或类似的东西......现在我无法得到它的工作。 – alexanoid