【问题标题】:Neo4J Driver Node Merge/Creation - is there a cleaner way to deal with propertiesNeo4J 驱动程序节点合并/创建 - 是否有更清洁的方式来处理属性
【发布时间】:2017-08-16 15:20:46
【问题描述】:

我目前正在使用 Neo 来创建监控 API(目前使用 1.4.2 Java 驱动程序)。其中一部分涉及创建我自己的 MonitorNode/MonitorEdge 图(这些是我自己的类),然后将它们与我的 Neo 实例同步。我的 MonitorNode 有一个我想要同步的属性的字符串/对象映射(加上我用作主查找键的 vertexId 和一个类型)。我可以制作一个 MERGE/SET 密码命令,该命令几乎完全符合我的需要,但由于我已经有一个字符串/对象映射,是否有一种更简洁的方式来表达“这是我想要设置的属性”而无需为每个属性指定一个 SET 命令?

通过 Java 驱动程序更新数据的示例相对较少(我发现了 - 请随时链接任何资源),我觉得我可能在这里遗漏了一些简单的东西。

private void syncNode(MonitorNode node) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("vertexId", node.getVertexId());
    StringBuilder builder = new StringBuilder();
    builder.append("MERGE(n:" + node.getType() + " {vertexId: {vertexId}})");
    if (node.getProperties() != null) {
        for (Entry<String, Object> e : node.getProperties().entrySet()) {
            builder.append(" SET n." + e.getKey() + " = {" + e.getKey() + "}");
            params.put(e.getKey(), e.getValue());
        }
    }
    Session session = driver.session();
    session.run(builder.toString(), params);
}

谢谢,

戴夫

【问题讨论】:

  • 警告任何借用此代码的人 - 为每个节点同步(频繁)创建一个会话是一个非常糟糕的主意(因为我没有关闭会话嫌疑犯)。为多个节点同步重新使用单个会话使代码运行速度提高了很多倍,并在我的服务器上停止了一堆非常奇怪的内存错误。

标签: neo4j neo4j-java-api


【解决方案1】:

SET n += map 语法从map 更新n 节点的属性。

这应该可行:

static final Map<String, Object> EMPTY_MAP = new HashMap<String, Object>();

private void syncNode(MonitorNode node) {
    Map<String, Object> props = node.getProperties();
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("vertexId", node.getVertexId());
    params.put("props", props == null ? EMPTY_MAP : props);
    StringBuilder builder = new StringBuilder();
    builder.append("MERGE(n:" + node.getType() + " {vertexId: $vertexId})");
    builder.append(" SET n += $props");
    Session session = driver.session();
    session.run(builder.toString(), params);
}

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多