Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 在节点或关系中添加映射作为属性_Neo4j_Cypher - Fatal编程技术网

Neo4j 在节点或关系中添加映射作为属性

Neo4j 在节点或关系中添加映射作为属性,neo4j,cypher,Neo4j,Cypher,有没有办法将地图添加为属性?我想将地址行1、2等存储在address属性本身中 类似的东西- RETURN {address: {firstline:"a", secondline:"b"}, name:"ABC"} 然而,当我在CREATE或SET中尝试此操作时,会出现错误 我试过这个- create (a:Person {name: "ABC", address: {firstline:"a", secondline:"b"}}) 错误- Property values can only

有没有办法将地图添加为属性?我想将地址行1、2等存储在address属性本身中

类似的东西-

RETURN {address: {firstline:"a", secondline:"b"}, name:"ABC"}
然而,当我在CREATE或SET中尝试此操作时,会出现错误

我试过这个-

create (a:Person {name: "ABC", address: {firstline:"a", secondline:"b"}})
错误-

Property values can only be of primitive types or arrays thereof

不支持,嵌套数组不受支持,同样在图形中也没有意义,因为您通常会将地址建模为与人不同的节点

(person:Person {name:"ABC"})-[:CURRENT_ADDRESS]->(addr:Address {firstLine:"a", secondLine:"b"})

不支持,嵌套数组不受支持,同样在图形中也没有意义,因为您通常会将地址建模为与人不同的节点

(person:Person {name:"ABC"})-[:CURRENT_ADDRESS]->(addr:Address {firstLine:"a", secondLine:"b"})

无法将地图添加为属性。您应该将
地址
创建为单独的节点,并与
人员
建立
关系。或将地址添加为
property array
Person
,例如

(a:Person {name: "ABC", address: ["a", "b"]})

当然,您以后必须将该数组转换回应用程序中的某个位置,以获得最初需要的映射。

不可能将映射添加为属性。您应该将
地址
创建为单独的节点,并与
人员
建立
关系。或者将地址作为
属性数组
添加到
人员
,例如

(a:Person {name: "ABC", address: ["a", "b"]})

当然,您以后必须将该数组转换回应用程序中的某个位置,以获得最初需要的映射。

您可以通过将嵌套映射序列化为JSON字符串并推送到节点来实现这一点。如果你的要求是

 {address:{firstline:"a",secondline:"b"},name:"ABC"}
然后,如果值在neo4j中不是有效类型,则遍历映射,然后将其转换为JSON字符串。你皈依了吗

 {firstline:"a",secondline:"b"}==>json string.
在密码中,它充当普通字符串,因此可以工作。 从节点检索数据时,将属性反序列化为本机对象

这种方法的缺点是需要反序列化每个属性,因为我们不知道值是普通字符串还是包含嵌套映射的JSON字符串

因此,我的解决方案是,当您转换为JSON字符串时,请注意哪些键正在转换为JSON,并使用特定键将此信息保存在节点中,例如:
JSON\u keys=['address']
仅读取时,转换json_密钥数组中的那些密钥

1)your map = {address: {firstline:"a", secondline:"b"}, name:"ABC"}
2)convert to json = {address: '{firstline:"a", secondline:"b"}', name:"ABC"}
3)note which keys are converted = {address: '{firstline:"a", secondline:"b"}', name:"ABC",json_keys=["address"]}

可以通过将嵌套映射序列化为JSON字符串并推送到节点来实现这一点。如果你的要求是

 {address:{firstline:"a",secondline:"b"},name:"ABC"}
然后,如果值在neo4j中不是有效类型,则遍历映射,然后将其转换为JSON字符串。你皈依了吗

 {firstline:"a",secondline:"b"}==>json string.
在密码中,它充当普通字符串,因此可以工作。 从节点检索数据时,将属性反序列化为本机对象

这种方法的缺点是需要反序列化每个属性,因为我们不知道值是普通字符串还是包含嵌套映射的JSON字符串

因此,我的解决方案是,当您转换为JSON字符串时,请注意哪些键正在转换为JSON,并使用特定键将此信息保存在节点中,例如:
JSON\u keys=['address']
仅读取时,转换json_密钥数组中的那些密钥

1)your map = {address: {firstline:"a", secondline:"b"}, name:"ABC"}
2)convert to json = {address: '{firstline:"a", secondline:"b"}', name:"ABC"}
3)note which keys are converted = {address: '{firstline:"a", secondline:"b"}', name:"ABC",json_keys=["address"]}

你好如果您在Stack overflow签出以备将来使用,那就更好了-谢谢你好!如果您在Stack overflow签出以备将来使用,那就更好了-非常感谢。