0
我有3種類型的節點「項目」,「用戶」,「公司」和這些有關係如下:Neo4j的查詢沒有返回正確的結果
(u : User)-[r:HAVE_DONATED{amount}]->(p : Project)
(c : Company)-[r:HAVE_DONATED{amount}]->(p : Project)
兩個用戶可以是朋友,可以檢查as
(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
這個查詢給了我正確的項目,但問題是捐助者和捐款是不正確的。在捐贈者和捐款中,它只計算用戶貢獻,而不是(用戶和公司)。我想結合捐贈用戶和公司。
感謝您的查詢,但這個查詢存在一個小問題,在捐贈中它不會考慮到非朋友成員所做的捐贈。這將導致正確的項目,但不正確的捐贈。 MATCH(u1:User {id:{id}}) - [:HAS_ACCOUNT] - >() - [:FRIEND] - ()< - [:HAS_ACCOUNT] - (u2:User) - [r1:HAVE_DONATED] - >(p:Project) 可選匹配(c) - [r2:HAVE_DONATED] - >(p) WITH p,COUNT(c)作爲捐助者,SUM(TOINT(r2.amount))AS捐贈 RETURN {id: p.id,捐助者:捐贈者,捐款:捐贈} AS項目 – user3542450
好的,我已經更新了我的答案。 – cybersam