根据日期获取组聚合的不同标签顶点
Get different label vertex for group aggregation based on date
v1=graph.addVertex(label,"l1","submit_time",Fri Apr 26 21:01:36 PDT 2019) //v[2345432]
v2=graph.addVertex(label,"l2","start_time",Fri Apr 26 22:01:36 PDT 2019) // v[409632904]
v3=graph.addVertex(label,"l2","start_time",Fri Apr 26 22:01:36 PDT 2019) //v[204824704]
v4=graph.addVertex(label,"l2","start_time",Fri Apr 26 23:01:36 PDT 2019). //v[307241008]
Edge e1 = v1.addEdge("e1", v2);
Edge e2 = v1.addEdge("e1", v3);
Edge e3 = v1.addEdge("e1", v4);
g.V().hasLabel("l2").group().by(map{(it.get().value("start_time").getYear()+1900)+"/"+(it.get().value("start_time").getMonth()+1)+"/"+it.get().value("start_time").getDate()+" "+it.get().value("start_time").getHours()})
我们得到以下输出:
输出1:
2019/4/26 23:[v[307241008]],
2019/4/26 22:[v[409632904],v[204824704]]
任何人都可以帮助我获得每个聚合值(由 l2 聚合并且所有 l2 顶点都有到 l1 的边),所以我也需要在单个查询中获得其相应的 l1 标签顶点。
例如:
输出2:
2019/4/26 23:[v[307241008], v[2345432]
2019/4/26 22:[v[409632904],v[204824704]],v[2345432]
谢谢
让我从创建示例图的适当脚本开始,以便其他人可以更轻松地跟进:
g = TinkerGraph.open().traversal()
g.addV('l1').
property(id, 2345432).
property('submit_time', new Date('Fri Apr 26 21:01:36 PDT 2019')).
addV('l2').
property(id, 409632904).
property('start_time', new Date('Fri Apr 26 22:01:36 PDT 2019')).
addV('l2').
property(id, 204824704).
property('start_time', new Date('Fri Apr 26 22:01:36 PDT 2019')).
addV('l2').
property(id, 307241008).
property('start_time', new Date('Fri Apr 26 23:01:36 PDT 2019')).
addE('e1').from(V(2345432)).to(V(409632904)).
addE('e1').from(V(2345432)).to(V(204824704)).
addE('e1').from(V(2345432)).to(V(307241008)).iterate()
并且您的查询格式正确:
g.V().hasLabel("l2").
group().
by {(it.value("start_time").getYear() + 1900) + "/" +
(it.value("start_time").getMonth() + 1) + "/" +
it.value("start_time").getDate() + " " +
it.value("start_time").getHours()}
现在,如果您想添加所有 l1
个顶点,您不能再使用简单的 Map
作为结果。每个条目都需要自己的地图,因此您可以捕获第三个字段。因此,您需要展开地图并用 project()
步重塑它:
g.V().hasLabel("l2").
group().
by {(it.value("start_time").getYear() + 1900) + "/" +
(it.value("start_time").getMonth() + 1) + "/" +
it.value("start_time").getDate() + " " +
it.value("start_time").getHours()}.
unfold().
project('time','l2','l1').
by(keys).
by(values).
by(select(values).unfold().in('e1').dedup().fold())
这将产生:
gremlin> g.V().hasLabel("l2").
......1> group().
......2> by {(it.value("start_time").getYear() + 1900) + "/" +
......3> (it.value("start_time").getMonth() + 1) + "/" +
......4> it.value("start_time").getDate() + " " +
......5> it.value("start_time").getHours()}.
......6> unfold().
......7> project('time','l2','l1').
......8> by(keys).
......9> by(values).
.....10> by(select(values).unfold().in('e1').dedup().fold())
==>[time:2019/4/26 23,l2:[v[307241008]],l1:[v[2345432]]]
==>[time:2019/4/26 22,l2:[v[409632904],v[204824704]],l1:[v[2345432]]]
v1=graph.addVertex(label,"l1","submit_time",Fri Apr 26 21:01:36 PDT 2019) //v[2345432]
v2=graph.addVertex(label,"l2","start_time",Fri Apr 26 22:01:36 PDT 2019) // v[409632904]
v3=graph.addVertex(label,"l2","start_time",Fri Apr 26 22:01:36 PDT 2019) //v[204824704]
v4=graph.addVertex(label,"l2","start_time",Fri Apr 26 23:01:36 PDT 2019). //v[307241008]
Edge e1 = v1.addEdge("e1", v2);
Edge e2 = v1.addEdge("e1", v3);
Edge e3 = v1.addEdge("e1", v4);
g.V().hasLabel("l2").group().by(map{(it.get().value("start_time").getYear()+1900)+"/"+(it.get().value("start_time").getMonth()+1)+"/"+it.get().value("start_time").getDate()+" "+it.get().value("start_time").getHours()})
我们得到以下输出: 输出1: 2019/4/26 23:[v[307241008]], 2019/4/26 22:[v[409632904],v[204824704]]
任何人都可以帮助我获得每个聚合值(由 l2 聚合并且所有 l2 顶点都有到 l1 的边),所以我也需要在单个查询中获得其相应的 l1 标签顶点。 例如: 输出2: 2019/4/26 23:[v[307241008], v[2345432] 2019/4/26 22:[v[409632904],v[204824704]],v[2345432] 谢谢
让我从创建示例图的适当脚本开始,以便其他人可以更轻松地跟进:
g = TinkerGraph.open().traversal()
g.addV('l1').
property(id, 2345432).
property('submit_time', new Date('Fri Apr 26 21:01:36 PDT 2019')).
addV('l2').
property(id, 409632904).
property('start_time', new Date('Fri Apr 26 22:01:36 PDT 2019')).
addV('l2').
property(id, 204824704).
property('start_time', new Date('Fri Apr 26 22:01:36 PDT 2019')).
addV('l2').
property(id, 307241008).
property('start_time', new Date('Fri Apr 26 23:01:36 PDT 2019')).
addE('e1').from(V(2345432)).to(V(409632904)).
addE('e1').from(V(2345432)).to(V(204824704)).
addE('e1').from(V(2345432)).to(V(307241008)).iterate()
并且您的查询格式正确:
g.V().hasLabel("l2").
group().
by {(it.value("start_time").getYear() + 1900) + "/" +
(it.value("start_time").getMonth() + 1) + "/" +
it.value("start_time").getDate() + " " +
it.value("start_time").getHours()}
现在,如果您想添加所有 l1
个顶点,您不能再使用简单的 Map
作为结果。每个条目都需要自己的地图,因此您可以捕获第三个字段。因此,您需要展开地图并用 project()
步重塑它:
g.V().hasLabel("l2").
group().
by {(it.value("start_time").getYear() + 1900) + "/" +
(it.value("start_time").getMonth() + 1) + "/" +
it.value("start_time").getDate() + " " +
it.value("start_time").getHours()}.
unfold().
project('time','l2','l1').
by(keys).
by(values).
by(select(values).unfold().in('e1').dedup().fold())
这将产生:
gremlin> g.V().hasLabel("l2").
......1> group().
......2> by {(it.value("start_time").getYear() + 1900) + "/" +
......3> (it.value("start_time").getMonth() + 1) + "/" +
......4> it.value("start_time").getDate() + " " +
......5> it.value("start_time").getHours()}.
......6> unfold().
......7> project('time','l2','l1').
......8> by(keys).
......9> by(values).
.....10> by(select(values).unfold().in('e1').dedup().fold())
==>[time:2019/4/26 23,l2:[v[307241008]],l1:[v[2345432]]]
==>[time:2019/4/26 22,l2:[v[409632904],v[204824704]],l1:[v[2345432]]]