【问题标题】:Passing parameters with Map to Neo4j query Scala使用 Map 将参数传递给 Neo4j 查询 Scala
【发布时间】:2018-05-04 08:06:46
【问题描述】:

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

【问题讨论】:

  • 一种粗略的方法是使用像IntegerDouble 这样的Java 对象,因为它们是AnyRef 层次结构的一部分。

标签: scala neo4j


【解决方案1】:

试试这个example project自述页面。在这里它将数据作为地图传递。

给出的示例代码是:

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 中工作。

【讨论】:

  • 我看到了这个例子。我已对我的问题添加了更新。
【解决方案2】:

我设法通过将参数显式更改为 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)

【讨论】:

  • 如果你能做到Integer.valueOf(data(0))会更容易。
  • 使用这种方法 paramsMap 类型将是 Map[String, Integer] 而不是 AnyRef
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2017-09-27
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多