Передача параметров с помощью карты в запрос Neo4j Scala - PullRequest
0 голосов
/ 04 мая 2018

У меня есть запрос, где мне нужно передать много параметров, используя Neo4jDriver с Scala. Я не нашел возможности передать их как карту, но мне удалось передать их только как часть строки запроса. Так это выглядит так:

val arr = Array("18731", "41.84000015258789", "-87.62999725341797")
val query1 = "MATCH ()-relations traversal  WHERE mt.topic_id = gt.topic_id AND distance(point({ longitude: " + data(2) +  ", latitude: " + data(1) + "}),point({ longitude: v.lon, latitude: v.lat })) < 4000 AND mt.member_id = " + data(0) + " RETURN distinct g.group_name " +
          "as group_name, e.event_name as event_name, v.venue_name as venue_name"

И тогда я могу выполнить этот запрос как neo4jSession.run(query1)

Есть ли другой способ передать эти значения из массива в качестве параметров?

Используя параметры, я имею в виду что-то вроде этого:

val paramsMap = Map("lat" -> data(1).toDouble, "lon" -> data(2).toDouble, "id" -> data(0).toInt)

UPDATE:

В Scala есть neo4jSession.run(query,paramsMap) карта должна быть типа Map [String, AnyRef], когда моя карта имеет тип [String, Double], потому что мне нужно передать значения типа double и int. Поэтому я не знаю, как я могу использовать этот метод в моем случае.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Мне удалось передать параметры, явно изменив их на AnyRef, и запрос работает отлично.

val paramsMap = Map("lat" -> data(1).toDouble.asInstanceOf[AnyRef], "lon" -> data(2).toDouble.asInstanceOf[AnyRef], "id" -> data(0).toInt.asInstanceOf[AnyRef])


    def toRow(record: Record):Seq[String] =
      fieldsToRetrieve.map(record.get(_).toString
      )

    neo4jSession.run(neo4jQueries.searchQuery, paramsMap.asJava)
0 голосов
/ 04 мая 2018

Попробуйте этот пример проекта страницу readme. Здесь он передает данные в виде карты.

Пример кода, приведенного здесь:

Driver driver = GraphDatabase.driver("bolt://localhost");
String query = "MATCH (:Movie {title:{title}})<-[:ACTED_IN]-(a:Person) RETURN a.name as actor";

try (Session session = driver.session()) {

    StatementResult result = session.run(query, singletonMap("title", "The Matrix"));
    while (result.hasNext()) {
        System.out.println(result.next().get("actor"));
    }
}

Надеюсь, это поможет.

EDIT: Этот пример написан на Java, но должен быть тривиальным, чтобы он работал в Scala.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...