我需要介紹的標準係數以下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