Neo4j 2 中的嵌套地图和集合

6
我知道节点和关系属性仅限于原始类型或原始类型的数组。Neo4j 2.1参考卡片的“Maps”部分提到:
{ name:'Alice',age:38, address:{city:'London',residential:true}}
字面地图在花括号中声明,就像属性地图一样。支持嵌套地图和集合。
当然,像下面这样的东西:
CREATE (alice {name:'Alice', age:38, address:{city:'London', residential:true}})

抛出异常:

Error: Property values can only be of primitive types or arrays thereof Neo.ClientError.Statement.InvalidType

在什么情况下,Neo4j支持嵌套的映射和集合?
3个回答

4
参考卡片有点太微妙了。最重要的单词是“文字的”。换句话说,您只能在文字中使用任意嵌套的地图和数组,但不能将这些内容存储在节点或关系中。
例如,这个例子有效:
WITH {name:'Alice', age:38, address:[{city:'London', residential:true}, {city: 'Paris', residential: false} ]} AS x
RETURN x;

但是这个失败了:
CREATE (x {name:'Alice', age:38, address:[{city:'London', residential:true}, {city: 'Paris', residential: false} ]})
RETURN x;

2
那么如何存储它们? - Marcin Erbel

0

还有一个技巧,您可以在节点中放置属性地图,就像这样

CREATE (x {
    `properties.name`: 'Alice', `properties.city`: 'London', `properties.residential`: true }
  )

然后在您的实体中使用@CompositeProperty:

@CompositeProperty(converter = PropertiesToMapConverter.class)
    private Map<String, Object> properties;

还需要一个转换器,将所需类型转换为图数据库中存储的类型。


0

有一种方法可以通过将嵌套的映射转换为JSON字符串来实现。在这里回答了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接