Cypher:分组/关系

问题描述 投票:-2回答:1

我是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”中的值。似乎很容易,但我似乎受到挑战!

有什么建议?

neo4j cypher
1个回答
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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.