Die Knoten in meiner db sind wie folgt:Neo4j Abfrage erhalten führen ohne Duplizierung
(u : User)-[:HAVE_DONATED{amount, txnId, timestamp}]->(p : Project)
(c : Company)-[:HAVE_DONATED{amount, txnId, timestamp}]->(p : Project)
Ein Benutzer kann mehrfach und gleiche gilt für Unternehmen zu einem Projekt spenden. Ich speichere Transaktions-ID und Betrag in Relation, ist es eine gute Praxis? Jetzt muss ich eine Abfrage schreiben, die alle Projekte abruft, in denen ein Benutzer gespendet hat. Das Ergebnis sollte folgende Eigenschaften enthalten: projectId: {projectId, totalDonation (Spende von Benutzer + Unternehmen), totalDonor (Benutzer + Unternehmen), individualContribution (individueller Beitrag des Benutzers in diesem Projekt, wenn der Benutzer dann mehrfach gespendet hat es sollte alle Spenden zusammenfassen), donationTime (wenn der Benutzer mehrere Male für dasselbe Projekt gespendet hat, sollte er den letzten Zeitstempel auswählen)}.
Ich habe die Abfrage geschrieben, wenn Benutzer oder Firma nur einmal spenden können. Ich bekomme doppeltes Projekt, wenn Benutzer/Firma mehrfach spendet. Es folgt die Abfrage für einzelne Spende:
Match (u : User {id : {userId}})-[r:HAVE_DONATED]->(p : Project) with p,r
where p.status IN ["2", "3"] OPTIONAL MATCH (c)-[r2:HAVE_DONATED]->(p) WITH
p, COUNT(distinct(c)) as donors, SUM(TOINT(r2.amount)) AS donation,
r.createdTimeStamp as timestamp, TOINT(r.amount) as individualContribution
return distinct {totalDonation : donation, id : p.id, title : p.title,
totalDonors : donors, donationTimeStamp : timestamp , contribution :
individualContribution} as project order by project.donationTimeStamp desc
Ein Projekt kann eine Spende vom Benutzer haben, aber in einer optionalen Übereinstimmung stimmen Sie nur mit dem Unternehmen überein, sodass totalDonation und totalDonors keinen Beitrag von anderen Nutzern als Unternehmen und übereinstimmenden Nutzern haben. – user3542450
OK, siehe meine aktualisierte Antwort. – cybersam
Ich habe 3 Knoten in meiner Datenbank. (u1: Benutzer) - [: HAVE_DONATED {Menge: 12332}] -> (p1: Projekt), (u2: Benutzer) - [: HAVE_DONATED {Anzahl: 100}] -> (p1: Projekt), (u2: Benutzer) - [: HAVE_DONATED {Menge: 12344}] -> (p1: Projekt). Der maximale Zeitstempel sollte vom passenden Benutzer sein, wenn er mehr als einmal gespendet hat und dann nach diesem Zeitstempel sortiert wurde. Ich bekomme nicht das richtige Ergebnis. http://postimg.org/image/3kyglgudd/ Bitte werfen Sie einen Blick auf diese URL. – user3542450