0

我目前正在使用 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);
}

谢谢,

戴夫

4

1 回答 1

0

SET n += map语法nmap.

这应该有效:

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);
}
于 2017-08-16T20:16:40.323 回答