#gremlin #amazon-neptune
Вопрос:
У меня есть традиционный график социальных сетей, где пользователь делает сообщение, другие пользователи комментируют это сообщение, и пользователи могут блокировать других пользователей. Я пытаюсь создать обход, исключающий комментарии, в которых пользователь, комментирующий, имеет block
преимущество перед пользователем публикации (пользователь публикации заблокировал пользователя, комментирующего, исключите их комментарии).
g.addV("user").as("poster") .addV("post") .addV("user").as("commenter") .addV("comment") .addE("post").from("poster").to("post") .addE("comment").from("commenter").to("comment") .addE("comment").from("comment").to("post") .addE("block").from("poster").to("commenter")
Это все, что я получил, но не компилируется:
g.V() .hasLabel("comment") .as("comment") .not( __.in_("comment") .as("commenter") .select("comment") .where( __.out("comment") .in_("post") .out("block") .hasId(__.select("commentOwner").id()) // the poster is blocking the commenter ) )
Это не работает, но это общая идея. Исключите комментарии, в которых владелец поста блокирует комментатора. Как я могу построить этот обход?
Ответ №1:
Я изменил ваш набор данных, чтобы у вас было 2 комментария к сообщению. 1 от заблокированного пользователя и 1 от разрешенного пользователя.
(Также изменены метки, чтобы более четко представлять действие в краевых метках)
g.addV("user").as("poster") .addV("post").as("post") .addV("user").as("commenter") .addV("user").property("name","user1").as("commenter1") # USERS .addV("comment").property("value", "commented by first user").as("comment") .addV("comment").property("value", "commented by second user").as("comment1") # COMMENTS .addE("posted").from("poster").to("post") .addE("commentedBy").from("commenter").to("comment") .addE("commentedBy").from("commenter1").to("comment1") .addE("commentedOn").from("comment").to("post") .addE("commentedOn").from("comment1").to("post") .addE("block").from("poster").to("commenter")
Тогда этот приведенный ниже запрос должен сделать свое дело:
g.V(). hasLabel("user").as("poster"). out("posted"). in("commentedOn").as("comments"). not(in("commentedBy").in("block").where(eq("poster"))). valueMap()
( Он предоставляет все комментарии к сообщению пользователя от комментаторов, которые не заблокировали пользователя.)