2016-04-22 9 views
0

Angenommen, ich habe ein Diagramm mit Scheitelpunkten mit der Eigenschaft name, was eine gute Möglichkeit ist, Ids aller Scheitelpunkte mit demselben Namen zu erhalten.Gremlin: Wie bekomme ich Duplikate in einem Graphen?

Erweitern, wenn ich ein Diagramm mit day und month Eigenschaften habe, wie IDs dieser Scheitelpunkte zurückgegeben werden, die die gleichen Werte teilen.

+0

Hat eine der folgenden Lösungen für Sie funktioniert? PS: wäre nützlich, wenn Sie sie als Lösung markieren, BTW. –

Antwort

5

Angenommen, Sie nicht den Wert der Duplikate kennen und Sie wollen einfach alle Duplikate finden möglich:

Hier ist eine schnelle und schmutzige Lösung für Sie. Verwenden Sie Group By, zum Beispiel:

g.V().has("name").limit(50).group().by("name"); 

ich nur limit verwenden, da diese Operation tun wird auf der gesamten Graphen sehr zeitaufwendig sein. Für die day und month Eigenschaften können Sie das gleiche tun.

+3

Es ist nicht wirklich "die gleiche Sache" für mehrere Eigenschaften. Für "Tag" und "Monat" wäre es ".group(). By (valueMap (" Tag "," Monat "))'. –

+0

Wie würden Sie jede Gruppe eliminieren, die nur einen Knoten enthält? –

+0

Nicht sicher, wie das innerhalb der Traversierung selbst zu tun ist. Es gibt ein 'groupCount'-Prädikat, das zwar nützlich sein kann, aber nicht sicher ist, wie. 'g.V(). hat (" DEGREE "). limit (50) .groupCount(). by (" name ")' –

0

Angenommen, Sie Indizes für diese indizierte Eigenschaften erstellt haben, bevor Sie die Eckpunkte erstellt, dann können Sie eine Abfrage erstellen Gremlin wie: def g = graph.traversal(); def vertices = g.V().has("name", "David").id();

Dies vorausgesetzt, dass Sie den Wert kennen Sie suchen.