我是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"。似乎容易,但我似乎受到挑战!
有什么建议吗?
答案 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
要记住的一点是,变长关系(我们使用*)的变量将引用关系的集合,而不是单个关系。