[英]Neo4J - pass List[String] into query and UNWIND
我試圖將List[String]
傳遞到查詢中,然后通過屬性匹配可能的多個節點,其中屬性的值是傳遞到查詢中的字符串。
我收到一個錯誤 - Expected parameter(s): list
import org.neo4j.driver.v1._
def getNodesByPropertyValue(list: List[String]): Future[List[(String, String)]] = {
val getNodes =
s"""
| UNWIND $$list AS propValue
| MATCH (i: item {id: propValue})<-[:CONTAINS]-(c: Collection)
| RETURN i.originalID AS OID
|""".stripMargin
storeAPI.NeoQuery(getNodes).resultList().map {
result =>
result.map {
record =>
record.get("OID").toString
}
}).recoverWith {
case e: Exception =>
logger.error(s"Failure in getNodesByProperty: ", e)
throw e
}
}
此外,當我使用$list
,我收到一條錯誤消息,指出 Neo4J 無法識別函數List()
。
對此的解決方案將不勝感激。
另外,將帶有$
的變量傳遞給查詢與將帶有$$
的變量傳遞給查詢有什么區別? 我認為$$
可能用於收藏,但我不確定,我還沒有找到有關它的信息。
謝謝。
在我的storeAPI.NeoQuery
我缺少將查詢中的字符串$$list
映射到查詢外的 val list
的參數。
下面的工作版本。
import org.neo4j.driver.v1._
def getNodesByPropertyValue(list: List[String]): Future[List[(String, String)]] = {
val getNodes =
s"""
| UNWIND $$list AS propValue
| MATCH (i: item {id: propValue})<-[:CONTAINS]-(c: Collection)
| RETURN i.originalID AS OID
|""".stripMargin
storeAPI.NeoQuery(getNodes, Map("list" -> list.asJava)).resultList().map {
result =>
result.map {
record =>
record.get("OID").toString
}
}).recoverWith {
case e: Exception =>
logger.error(s"Failure in getNodesByProperty: ", e)
throw e
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.