如何从密码查询报告JSON格式的命名属性?

时间:2016-03-02 19:04:00

标签: neo4j cypher

我有一个图表,其中节点链接到包含属性的其他节点。例如:

(:Person {Name: 'A'}) -[:OWNS]-> (:Object {Name: 'Car', Value: 2})
(:Person {Name: 'A'}) -[:OWNS]-> (:Object {Name: 'Computer', Value: 1})

是否有可能(如何)从密码查询中报告标记数据。预期格式最好是:

{Person: 'A', owns: {Car: 2, Computer: 1}}

我目前的查询是:

match (p:Person) -[:OWNS]-> (o:Object) 
return {Person: p.Name, owns: collect({name: o.Name, value: o.Value}) 

返回

{Person: 'A', owns: [{name: 'Car', value: 2}, {name: 'Computer', value: 1}]}

不幸的是,我写不出像:

return {Person: p.Name, owns: collect({o.Name: o.Value}) 

2 个答案:

答案 0 :(得分:0)

假设一个人可以拥有任意数量的汽车和电脑(包括0):

OPTIONAL MATCH (p:Person)-[:OWNS]->(car:Object { Name: 'Car' })
OPTIONAL MATCH (p)-[:OWNS]->(comp:Object { Name: 'Computer' })
RETURN { Person: p.Name, owns: { Cars: COLLECT(car.Value), Computers: COLLECT(comp.Value)}} AS result;

以下是人A的2辆车和0台电脑的示例结果:

{Person:"A", owns:{"Cars":[2,3],"Computers":[]}}

答案 1 :(得分:0)

1:获取所有节点:-START n=node (*) RETURN n; or match (n) return n

2:显示节点和关系:-MATCH (n) MATCH (n)-[r]-() RETURN n,rSTART n=node(*) MATCH (n)-[r]->(m) RETURN n,r,m

3:匹配节点和关系:-MATCH (a:Policy)-[:APPLIES_TO]-(Cluster) WHERE a.name = "pol-1nils" RETURN a, Cluster

4:获取特定节点的所有对象:-MATCH (list:Policy) return list

5:绑定到两个节点之间的实体:-match (a:WorkLoad)-[b:APPLIES_TO]->(c:Policy) where c.name = "shamshad" return a,b,c;