簡體   English   中英

使用Map將參數傳遞給Neo4j查詢Scala

[英]Passing parameters with Map to Neo4j query Scala

我有一個查詢,我需要使用帶有Scala的Neo4jDriver傳遞很多參數。 我沒有找到將它們作為地圖傳遞的任何可能,但我僅設法將它們作為查詢字符串的一部分傳遞。 所以看起來像這樣:

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)

更新:

在Scala中,有neo4jSession.run(query,paramsMap)映射應該是Map [String,AnyRef]類型,而我的映射是[String,Double]類型時,因為我需要傳遞double和int值。 因此,我不知道如何使用這種方法。

試試這個示例項目自述頁面。 它在這里將數據作為地圖傳遞。

給出的示例代碼為:

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"));
    }
}

希望這可以幫助。

編輯:此示例是在Java中,但要使它在scala中工作應該很簡單。

我設法通過將參數顯式更改為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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