Ich versuche Folger Beziehungen zwischen bestimmten Benutzern in meiner App teilen zu modellieren:bestimmte Ecken zurück und ob sie eine Kante mit einem bestimmten Vertex
Benutzer ---- ---- Benutzer
folgt(Think Twitter)
Angesichts einer Reihe von userIds muss ich alle diese Benutzer Vertices und einen booleschen geben, wenn ein bestimmter Benutzer (currentUser
) eine Kante follows
für diese Benutzer hat. Also muss ich wissen, ob oder ob nicht currentUser
ist jeder dieser Nutzer folgende:
user1: true
user2: true
user3: false
user4: true
Ich bin fest, wie man den folgenden Status abrufen. Wenn ich jeden Benutzer Vertex zurückkehren wie so:
currentUser = g.V(1); g.V().hasLabel("appUser").or(__.has("userId","123869681319429"), __.has("userId","103659593341656")).valueMap();
was wäre ein effizienter Befehl zu bestimmen, ob jeder von denen einen eingehenden follows
Rand von currentUser
hatte?
TitanDB 1.0.0 läuft auf DynamoDB.
Bearbeiten- Meine volle Arbeits Traversal Hinzufügen:
g.V().hasLabel('appUser').or(__.has('cId', '1232'),__.has('cId', '1116')).group().by().by(__.in('follows').hasId(hasLabel('appUser').has('pId', 'd13dfa6').id()).count())
Edit 2 - Ich zog diese Traversal Umschreiben besser, die Daten, die ich durch die Verwendung as()
und select()
erforderlich zu erfassen. Verlassen hier als Referenz:
g.V().hasLabel('appUser').or(__.has('cId', '1232'),__.has('cId', '1116')).as('user','followCount').select('user','followCount').by(__.valueMap()).by(__.in('follows').hasId(hasLabel('appUser').has('pId', 'd13dfa6').id()).count())
Vielen Dank, das funktioniert gut. Ich habe meine vollständige Arbeitsdurchquerung zur ursprünglichen Frage hinzugefügt. Wie Sie sehen können, suche ich Benutzer basierend auf einer ID und schließe dann Ihre Logik ein. Ist es möglich, bestimmte Eigenschaften der nachgeschlagenen Benutzer (firstName, lastName, etc) anstelle der gesamten Objekte zurückzugeben? Ich bin nicht sicher, wo ich diese Eigenschaften angeben könnte. – Fook
Der erste 'by()' -Modulator gibt den Schlüssel für die Map an.Du könntest ihm die Eigenschaft übergeben, um es herauszuziehen, oder vielleicht 'valueMap()' basierend auf 'Traversal', um die Eigenschaften zu entfernen. Ich denke, Map Equality würde es immer noch erlauben, richtig mit einer "Map" als Schlüssel zu gruppieren. Sie könnten auch das Ergebnis nachbearbeiten, um die 'Vertex'-Schlüssel in das zu ändern, was Sie wollen. Es gibt viele Möglichkeiten. –
Das Übergeben einer einzelnen Eigenschaft an 'by()' funktioniert großartig, aber ich kann nur eine einzelne Eigenschaft auf diese Weise zurückgeben. Ich habe versucht '.by (__. ValueMap())', aber das ergibt 'org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet kann nicht in org.apache.tinkerpop.gremlin.structure.Element' umgewandelt werden . Überlasse ich das richtig? Ich versuche, nach Möglichkeit aus Leistungsgründen jede Nachbearbeitung zu vermeiden. – Fook