Neo4J-将列表[String]传递给查询并取消缠绕

问题描述 投票:0回答:1

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

对此的解决方案将不胜感激。

[而且,将带有$的变量传递给查询与带$$的变量传递有什么区别?我以为$$可能用于集合,但不确定,我还没有找到有关它的信息。

谢谢。

scala neo4j
1个回答
0
投票

在我的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
}
}
© www.soinside.com 2019 - 2024. All rights reserved.