【发布时间】:2017-11-05 22:50:46
【问题描述】:
我正在尝试将地图或 json 对象作为属性存储在 Neo4j 中,但它不起作用。
【问题讨论】:
我正在尝试将地图或 json 对象作为属性存储在 Neo4j 中,但它不起作用。
【问题讨论】:
这是目前节点属性的限制。您有几种解决方法可供选择。
您可以将您的 json 对象转换为字符串并将其保存为属性。您可以使用 APOC Procedures 将 JSON 字符串与 Cypher 映射对象相互转换。
您可以将地图属性另存为节点上的属性,但这会丢失您从对象本身获得的分组。
如果 #2 还不够,您还可以更改图形模型,使 JSON 对象中的数据对应于与原始节点相关的图形对象、节点和属性。
【讨论】:
neo java OGM 库支持将地图存储为属性。如果您使用 @Properties 注释 java 类字段,该库将展开您的地图以图形节点属性。
类:
@NodeEntity
public class DataNode {
@GraphId
private Long id;
@Properties
private Map<String, String> map = new HashMap<>();
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
如何在java中使用:
DataNode data = new DataNode();
data.getMap().put("testKey", "keyvalue");
data.getMap().put("myKey", "key value for my key");
它在 neo 中的外观:
请注意,如果您最终使用带点“.”的映射键,则在从 neo => 嵌套映射加载实体时可能会产生奇怪的副作用。然后考虑更改@Properties 中的分隔符或更改键。
【讨论】: