基于聚合的日期顶点以从不同的顶点获取标签

时间:2019-05-15 09:07:42

标签: cassandra gremlin tinkerpop3

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的{​​{1}}属性汇总上述情况。我已经尝试过以下查询。

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")被认为是聚集的,并且在v[12347]v[45678]的边缘上它们也不满足“具有条件”的条件,所以我的{ {1}}为空。同样,在第二个结果中,我的一个顶点(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

1 个答案:

答案 0 :(得分:1)

您缺少的所有查询是一个额外的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]