Dane testowania jak poniżej:

g.addV('A').property('name','n').property('tag','key1');
g.addV('B').property('n','123');
g.addV('A').property('name','m').property('tag','key2');
g.addV('B').property('m','321')
g.V().hasLabel('A').addE('e').to(g.V().hasLabel('B'));

Biorąc pod uwagę "Key1" i "123", jak mogę uzyskać 1st b wieśniak? Próbowałem poniżej zapytania, nie działa g.V().hasLabel('B').as('B').inE('e').outV().has('tag','key1').as('A').select('B').has(select('A').values('name'),'123')

0
Zhongmin 26 marzec 2021, 10:21

2 odpowiedzi

Najlepsza odpowiedź

Musisz użyć nieco innego podejścia i wymienić has z etapem where. Mylący jest krok has wydaje się, że powinien być w stanie zaakceptować arbitralne przejście i przynieść jej wartość. W rzeczywistości wszystko, co się dzieje, jest to, że jeśli przemieszczenie wewnątrz has daje każdy wynik, jest traktowany jako "prawdziwy".

gremlin>  g.V().hasLabel('A').
......1>        has('tag','key1').as('A').
......2>        out('e').
......3>        where(valueMap().select(select('A').values('name')).unfold().is('123')).     
......4>        valueMap(true)

==>[id:60872,label:B,n:[123]]  
1
Kelvin Lawrence 26 marzec 2021, 15:37
g.V().has('A', 'tag', 'key1').
  out('e').
  has('B', 'n', '123')

Filtry pierwszej linii przez etykietę "A" i właściwość "Tag" == "Key1". Druga linia sprawia, że Gremlin wychodzi wzdłuż krawędzi "E". I będzie wylądował na sąsiednim wierzchołku. Filtry trzecie linii przez etykietę "B" i właściwość "N" == "123"

-1
Bassem 26 marzec 2021, 08:25