Гремлин запрашивает информацию о глубине при прохождении - PullRequest
1 голос
/ 27 сентября 2019

У меня есть сценарий использования, когда пользователи находятся в иерархии, такой как

user1 --HAS_CHILD -> user2 - HAS_CHILD -> user3 --HAS_CHILD -> user4

Для данного пользователя мне нужно получить все машины, принадлежащие этому пользователю, и все машины, принадлежащие детям этого пользователя,С автомобилями мне нужен пользователь (владелец), а также глубина этого пользователя от данного пользователя.

Пример.Данный пользователь является user2 , затем user3 имеет глубину 1, user4 имеет глубину 2.

Я могу получить информацию об автомобиле и владельца, используя следующий запрос, но как я могу получить childDepth ?.

g.V().has("User", "id", "user2")
 .union(
    __.out("OWNS").hasLabel("Car"),
    __.repeat(
       __.out("HAS_CHILD").hasLabel("User")
    ).emit().out("OWNS").hasLabel("Car")
 )
 .project("plateNumber", "owner", "model", "year", "childDepth")
 .by(__.values("plateNumber").fold())
 .by(__.in("OWNS").values("owner").fold())
 .by(__.values("model").fold())
 .by(__.values("year").fold())
 .by(???)

1 Ответ

3 голосов
/ 29 сентября 2019

Вы можете использовать withSack:

g.withSack(0).V().has("User", "id", "user2")
 .union(
    __.out("OWNS").hasLabel("Car"),
    __.repeat(
         __.sack(sum).by(constant(1))
       .out("HAS_CHILD").hasLabel("User")
    ).emit().out("OWNS").hasLabel("Car")
 )
 .project("plateNumber", "owner", "model", "year", "childDepth")
 .by(__.values("plateNumber").fold())
 .by(__.in("OWNS").values("owner").fold())
 .by(__.values("model").fold())
 .by(__.values("year").fold())
 .by(__.sack())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...