我是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”中的值。似乎很容易,但我似乎受到挑战!
有什么建议?
首先,如果使用数值而不是字符串值,则更容易乘以所有权金额。它们需要采用十进制格式,.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
需要记住的是,变长关系(我们使用*)的变量将引用关系集合,而不是单个关系。