Пошаговое с groovy не извлекает значения для некоторого узла - PullRequest
0 голосов
/ 10 января 2019

Проблема описывается следующим образом:

Я хочу найти некоторые интересующие пути и получить соответствующие свойства вершин или ребер, я использовал следующие обозначения:

g.V().has("p_v_name", "d8e5d39d63c580acdb3eb188a1f4a942").
repeat(__.bothE().otherV().simplePath()).
times(3).emit().
has('p_v_tag').
path().
by(
    __.project("label", "id", "p_v_black_tag").
    by(__.label()).
    by(__.id()).
    by(__.choose(__.has('p_v_tag'),
                __.properties('p_v_tag').project('value').by(__.value()).fold(),
                __.constant([])
                )
    )
).unfold()

Приведенный выше код дает мне следующий результат:

==>[label:v_user_key,id:749577404608,p_v_tag:[[value:PR016],[value:PR033],[value:PR068]]]
==>[label:e_application_id,id:4jjrk79js-9kcn170g-8ph-nvxhl4s0,p_v_tag:[]]
==>[label:v_application_id,id:1871880949872,p_v_tag:[]]

Результат развернут для облегчения чтения. Это просто путь, состоящий из двух узлов и одного ребра. Исходный узел имеет свойство p_v_tag, оно имеет несколько свойств. Проблема в том, что целевой узел также имеет свойство p_v_tag, но код не выводит значения.

Я проверил, что целевой узел имеет свойство p_v_tag и он не пустой, как показано ниже:


gremlin> g.V(1871880949872).properties('p_v_tag')
==>vp[p_v_tag->outdated]

Я читаю документ (http://tinkerpop.apache.org/docs/current/reference) снова и снова, но я не могу понять, как сделать это правильно, может ли какой-либо орган помочь мне или дать мне какой-нибудь совет?

1 Ответ

0 голосов
/ 11 января 2019

Я не уверен, почему это не сработает. Что произойдет, если вы попробуете этот обходной путь для замены:

by(__.choose(__.has('p_v_tag'),
            __.properties('p_v_tag').project('value').by(__.value()).fold(),
            __.constant([])
            )

с:

by(coalesce(properties('p_v_tag').
   project('value').
     by(__.value()).
   fold(), 
   constant([]))
...