我有一个查询,我需要使用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值。所以我不知道如何在我的情况下使用这种方法。
答案 0 :(得分:1)
试试这个example project自述页面。在这里,它将数据作为地图传递。
给出的示例代码是:
Fct_reorder()
希望这有帮助。
编辑: 这个例子是用Java编写的,但是要使它在scala中工作应该是微不足道的。
答案 1 :(得分:1)
我设法通过明确地将它们更改为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)