我正在尝试将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
}
}