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
。
答案 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]