使用Map传递参数到Neo4j查询Scala

时间:2018-05-04 08:06:47

标签: scala neo4j

我有一个查询,我需要使用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值。所以我不知道如何在我的情况下使用这种方法。

2 个答案:

答案 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)