在Neo4J节点属性中存储动态数组

在Neo4J节点属性中存储动态数组,neo4j,cypher,Neo4j,Cypher,我正在尝试使用Neo4J在节点中存储动态json数组 MATCH (n:Users) WHERE n.email = 'a@a.com' SET n.rated = [{email: 'b@b.com', date: '09/11/2015'}, {email: 'c@c.com', date: '09/11/2015'}] RETURN n 另外,阅读帖子:我只是在尝试: MATCH (n:Users) WHERE n.email = 'a@a.co

我正在尝试使用
Neo4J
在节点中存储动态json数组

MATCH (n:Users) 
WHERE n.email = 'a@a.com' 
SET n.rated = [{email: 'b@b.com', date: '09/11/2015'}, 
               {email: 'c@c.com', date: '09/11/2015'}]  
RETURN n
另外,阅读帖子:我只是在尝试:

MATCH (n:Users) 
WHERE n.email = 'a@a.com' 
SET n.rated = [['b@b.com','09/11/2015'],
               ['c@c.com','09/11/2015']] 
RETURN n
但是我得到了一个错误:
包含混合类型的集合不能存储在属性中。


是否可以在节点属性中设置json结果或数组?

节点中不能嵌套复杂数据。在本例中,您尝试存储一个嵌套的文档数组,然后尝试一个数组数组。只能有基元类型的数组(例如字符串数组或整数数组)


编辑只是添加这个,因为在使用图形数据库(特别是Neo4j)时似乎有些混乱。要处理试图存储在数组中的嵌套数据类型,只需将这些嵌套对象中的每一个存储为自己的节点,并与原始节点建立关系(例如,
[:RATED]
)。这将允许您在每个附加节点上拥有完整的属性列表(电子邮件、日期),然后您可以查询此数据,就像您可以查询示例根节点中的任何数据一样。

正如@david makogon所述,这是无法做到的。我不会在这里重复他的回答

我之前通过将JSON存储为字符串实现了这一点

MATCH (n:Users) 
WHERE n.email = 'a@a.com' 
SET n.rated = "[{email: 'b@b.com', date: '09/11/2015'}, 
               {email: 'c@c.com', date: '09/11/2015'}]"
RETURN n
这将存储您想要的结果,但在检索时可能需要一些操作。这可能符合您的要求,也可能不符合您的要求


我在必要时使用了序列化/反序列化的方法。

基于@ceej的答案是可能的。我测试了它,它工作了。[当然,您可以将任何需要的内容存储为字符串。但现在它不可查询。而且,如果我存储像[“a”、“b”、“c”]这样的简单数组这就是可查询的吗?是的,它支持数字、字符串和布尔数组。这应该是正确的答案,因为它提倡与Neo4j一起使用的正确方法。虽然这可能会起作用,但它完全忽略了Neo4j的优点,因为除非检索并通过它进行搜索,否则无法搜索该字符串中的内容。True取决于您的场景和您试图实现的目标。通常我不会推荐它,而是尝试对我的图进行建模以表示所需的场景。