Neo4j BatchInserter 使用 setNodeProperties 设置具有值的数组

Neo4j BatchInserter using setNodeProperties to set an array with values

我正在使用 BatchInserter 实例来获取和设置节点的属性。 我的数据在某些属性中有多个值。

property value
======== =========
synonym  animal
synonym  mammalian

我想将这些值放在同一节点的同一 属性 中。

我使用了以下代码片段来读取和设置值:

String[] values = {"animal", "mammalian"};
for (int i = 0; i < values.length(); i++) {
    Map<String, Object> nodeProps = db.getNodeProperties(0); // Node 0 properties
    nodeProps.put("synonym", values[i]);
    db.setNodeProperties(0, nodeProps);
}

在第一次迭代中 属性 synonym 得到值 animal。在第二次迭代中,属性 被值 mammalian.

覆盖

我的问题是:如何获取以前的值、添加新值并将 属性 设置到节点以便在图表中获得 synonym=['animal', 'mammalian']

如果你想在 node/relationship 属性 上有多个值,你需要使用数组。所以你在 属性 synonyms 上有一个 String[] 作为值:

修改现有的属性:

String[] values = {"animal", "mammalian"};
Map<String, Object> nodeProps = db.getNodeProperties(0); 
String[] existingValues = nodeProps.get("synonym");
// using org.apache.commons.lang.ArrayUtils from Apache Commons Lang:
String[] amendedValues = ArrayUtils.addAll(existingValues, values); 
nodeProps.put("synonym", amendedValues);
db.setNodeProperties(0, nodeProps);