我到处搜索过,但是找不到答案。
我需要创建一个节点Config
,该节点的动态属性对象具有2个键/值对(例如name
和type
)。查询键时,键应以properties.name
和properties.type
结尾。但是我似乎无法正确使用create语法。这就是我正在做的:
CREATE (c1:Config) set c1.properties=[{name:"CiPipelineConfig1"}, {type:"test"}]
但这给了我一些奇怪的错误:
Neo.ClientError.Statement.TypeError: Neo4j only supports a subset of Cypher types for storage as singleton or array properties.
有人可以帮我弄清楚这个查询吗?
答案 0 :(得分:3)
Neo4j的property type集有限。
您应该将值存储为节点的属性,而不是将其添加到一个属性中。
// You need the `` around the property name to escape the period
CREATE (c1:Config) set c1.`properties.name`="CiPipelineConfig1" set c1.`properties.type`="test"
如果这对您来说不够好,则需要将数据重新格式化为与Neo4j类型兼容的数据。
答案 1 :(得分:1)
创建嵌套属性的一种方法是使用JSON
属性作为字符串属性,可以在写入时转储和编码数据,在读取时加载和解码。
其中一个示例是python中的neomodel json属性。
这是neomodel json属性的代码:
class JSONProperty(Property):
"""
Store a data structure as a JSON string.
The structure will be inflated when a node is retrieved.
"""
def __init__(self, *args, **kwargs):
super(JSONProperty, self).__init__(*args, **kwargs)
@validator
def inflate(self, value):
return json.loads(value)
@validator
def deflate(self, value):
return json.dumps(value)