簡體   English   中英

Neo4J - 將 List[String] 傳遞給查詢和 UNWIND

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM