Cypher:分组/关系

时间:2017-12-28 16:13:34

标签: neo4j cypher

我是Cypher / graph DB的新手。我创建了一个例子来理解遍历但不完全理解它。

//Cypher below to create nodes.
(`0` :Person {id:'74474',Name:"Mr. Dan"}) ,
  (`1` :Company {id:'1234',Name:"Company A"}) ,
  (`2` :Company {id:'1111',Name:"Company B"}) ,
  (`3` :Person {id:'0844',Name:"Mr.X"}) ,
  (`4` :Person {id:'3455',Name:"Mr. Jack"}) ,
  (`5` :Person {id:'748222',Name:"Mr.Y"}) ,
  (`0`)-[:`owns` {amt:'50%'}]->(`1`),
  (`4`)-[:`owns` {amt:'30%'}]->(`1`),
  (`2`)-[:`owns` {amt:'20%'}]->(`1`),
  (`3`)-[:`owns` {amt:'30%'}]->(`2`),
  (`5`)-[:`owns` {amt:'70%'}]->(`2`)
// end

查询: 匹配(p:人) - [o:拥有*] - >(c:公司) 其中c.Name ="公司A" 返回p,o //

这给了我所有"人物"谁拥有"公司A"但我希望获得"%所有权"每个人。

我似乎无法提取或汇总关系中的值" o"。似乎容易,但我似乎受到挑战!

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先,如果使用数值而不是字符串值,则可以更容易地增加所有权金额。它们需要采用十进制格式,.5而不是'50%'

也许尝试这样的事情(在将amt值更改为浮点数之后),使用REDUCE()将路径中关系的所有金额相乘:

MATCH (p:Person)-[owns:owns*]->(c:Company) 
WHERE c.Name="Company A"
RETURN p, reduce(amt = 1, o in owns | amt * o.amt) as percentOwned

要记住的一点是,变长关系(我们使用*)的变量将引用关系的集合,而不是单个关系。