Neo4j查询没有返回正确的结果

时间:2016-04-21 10:14:22

标签: neo4j cypher

我有3种类型的节点'项目','用户''公司'这些相关如下:

(u : User)-[r:HAVE_DONATED{amount}]->(p : Project)
(c : Company)-[r:HAVE_DONATED{amount}]->(p : Project)

两个用户可以成为朋友,可以将其检查为

(u1 : User)-[:HAS_ACCOUNT]->()-[:FRIEND]-()<-[:HAS_ACCOUNT]-(u2 : User)

如果上述条件成立,那么两个用户就是朋友。

现在我必须找到我的朋友捐赠的所有项目以及捐赠和捐赠者数量。

Match (p : Project), (u1 : User {id : {id}}) with p, u1  
Optional Match (p)<-[r:HAVE_DONATED]-(u2) with a, u1, u2, r 
where (u1)-[:HAS_ACCOUNT]->()-[:FRIEND]-()<-[:HAS_ACCOUNT]-(u2) 
with p, count(u2) as donors, sum(toInt(r.amount)) as donations  
return {id : p.id, donor : donors, donation : donations} as project 

此查询给了我正确的项目,但问题是捐赠者和捐赠不正确。在捐赠者和捐赠中,它只计算用户贡献(不包括用户和公司)。我想要用户和公司的联合捐赠。

1 个答案:

答案 0 :(得分:0)

[EDITED]

要查找用户朋友捐赠的所有项目以及这些项目的捐赠总额,您可以使用此查询:

public class MyHybridWebViewRenderer : HybridWebViewRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<View> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null || Element == null)
        {
            return;
        }

        (e.NewElement as MyHybridWebView).DoSomeNative += (sender, args) =>
        {
            //Do something
            //Don't forget to unsubscribe in Dispose
        };
    }
}

如果标识为MATCH (u1:User {id : {id}})-[:HAS_ACCOUNT]->()-[:FRIEND]-()<-[:HAS_ACCOUNT]-(u2:User)-[:HAVE_DONATE‌D]->(p:Project) MATCH (donor)-[r:HAVE_DONATED]->(p) WITH p, COUNT(donor) as donors, SUM(TOINT(r.amount)) AS donations RETURN {id: p.id, donors: donors, donations:donations} AS project; 的用户没有为任何项目贡献的朋友,则查询不会返回任何内容。