Агрегированная вершина даты для получения метки из другой вершины - PullRequest
0 голосов
/ 15 мая 2019
g.addV('l1').
    property(id, 12347).
    property('submit_time', new Date('Wed May14 10:00:00 PDT 2019')).
  addV('l1').
    property(id, 4522323).
    property('submit_time', new Date('Wed May15 11:00:00 PDT 2019')).
  addV('l1').
    property(id, 2355208312).
    property('submit_time', new Date('Wed May15 11:00:00 PDT 2019')).
  addV('l3').
    property(id, 45678).
    property('start_time', new Date('Fri Apr 24 07:01:36 PDT 2019')).
  addV('l3').
    property(id, 67892).
    property('start_time', new Date('Fri Apr 24 07:01:36 PDT 2019')).
  addV('l3').
    property(id, 678954).
    property('start_time', new Date('Fri Apr 26 23:01:36 PDT 2019')).
    property('condition', "somevalue").
  addE('e1').
    from(V(12347)).
    to(V(45678)).
  addE('e1').
    from(V(12347)).
    to(V(67892)).
  addE('e1').
    from(V(4522323)).
    to(V(678954)).
  addE('e1').
    from(V(2355208312)).
    to(V(45678)).
  iterate()

Одна l1 вершина может быть связана с ребром (e1) для нескольких различных l3 вершин. Я пытаюсь агрегировать приведенный выше сценарий на основе свойства submit_time из l1. Я пробовал следующий запрос.

g.V().hasLabel("l1").
  group().
    by(map {(it.get().value("submit_time").getYear() + 1900) + "/" +
            (it.get().value("submit_time").getMonth() + 1) + "/" +
             it.get().value("submit_time").getDate()}).
  unfold().
  project('submitdate','job','jobdesc').
    by(keys).
    by(values).
    by(select(values).unfold().out('e1').has("condition","somevalue").fold()).
  order(local).
    by(keys, incr)

Это приводит меня к следующему результату.

==>[job:[v[12347]],jobdesc:[],submitdate:2019/5/14]
==>[job:[v[2355208312],v[4522323]],jobdesc:[v[678954]],submitdate:2019/5/15]

В приведенном выше результате он агрегирует на основе submitdate и возвращает мне соответствующую l1 вершину как job после агрегации, однако мой jobdesc пуст, поскольку он не удовлетворяет условию "имеет" .has("condition","somevalue") .

В 1-м результате, хотя вершина v[12347] рассматривается в агрегации и имеет ребро v[45678] и v[67892], они не удовлетворяют условию "имеет", поэтому моя jobdesc пуста. Аналогично, во втором результате одна из моих вершин (v[678954]) удовлетворяет вышеуказанному условию.

Может кто-нибудь, пожалуйста, помогите мне получить значение по умолчанию, например. пустой массив для jobdesc для каждой вершины задания, если он не удовлетворяет условию и рассматривается при агрегировании?

Ожидаемый результат

==>[job:[v[12347]],jobdesc:[[]],submitdate:2019/5/14]
==>[job:[v[2355208312],v[4522323]],jobdesc:[[],v[678954]],submitdate:2019/5/15]

Например: v[2355208312] рассматривается в агрегировании для submitdate 2019/5/14, но для него нет jobdesc, поэтому я не могу отобразить индекс для каждого задания и его соответствующего jobdesc.

1 Ответ

1 голос
/ 15 мая 2019

Весь ваш запрос отсутствует, это дополнительный map() и fold() шаг.

gremlin> g.V().hasLabel("l1").
           group().
             by(map {(it.get().value("submit_time").getYear()  + 1900) + "/" +
                     (it.get().value("submit_time").getMonth() +    1) + "/" +
                      it.get().value("submit_time").getDate()}).
           unfold().
           project('submitdate','job','jobdesc').
             by(keys).
             by(values).
             by(select(values).unfold().
                map(out('e1').has("condition","somevalue").fold()). /* for each job */
                fold()).
           order(local).
             by(keys, incr)
==>[job:[v[12347]],jobdesc:[[]],submitdate:2019/5/14]
==>[job:[v[4522323],v[2355208312]],jobdesc:[[v[678954]],[]],submitdate:2019/5/15]
...