Neo4J - передать List [String] в запрос и UNWIND - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь передать 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().

Решение этого вопроса будет оценено.

Кроме того, в чем разница между передачей переменной с $ в запрос и передачей переменной с $$? Я думал, что $$ может быть использован для коллекций, но я не уверен, я еще не нашел информацию о нем.

Спасибо.

1 Ответ

0 голосов
/ 24 февраля 2020

В моем storeAPI.NeoQuery я пропустил параметр, который отображает строку $$list в запросе на значение 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
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...