我正在尝试使用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
另外,阅读帖子:http://plnkr.co/edit/84ExEb2CVBaW5prReQ7h?p=preview我只想尝试:
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
但我收到错误:Collections containing mixed types can not be stored in properties.
是否可以在节点属性中设置json结果或数组?
答案 0 :(得分:4)
您不能在节点中嵌套复杂数据。在您的情况下,您尝试存储嵌套的文档数组,然后尝试一组数组。您可能只有基本类型的数组(例如,字符串数组或整数数组)。
编辑只是添加这个,因为使用图形数据库(特别是Neo4j)似乎有些混乱。要处理您尝试存储在数组中的嵌套数据的类型,您可以简单地将每个嵌套对象存储为自己的节点,并将关系返回到原始节点(例如[:RATED]
)。这将允许您在每个其他节点上拥有整个属性列表(电子邮件,日期),然后您就可以查询此数据,因为您可以查询示例的根节点中的任何数据。 / p>
答案 1 :(得分:1)
正如@ 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
这将存储您想要的结果,但在检索时可能需要一些操作。这可能符合您的要求,也可能不符合您的要求。
我已根据需要使用序列化/反序列化来使用此方法。