【问题标题】:Get different label vertex for group aggregation based on date根据日期获取用于组聚合的不同标签顶点
【发布时间】:2019-05-07 06:13:35
【问题描述】:
    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] 谢谢。

【问题讨论】:

  • 我在这里没有看到问题。您能否围绕您需要帮助的内容添加更多背景信息?

标签: cassandra gremlin tinkerpop janus


【解决方案1】:

让我从一个合适的脚本开始创建示例图,以便其他人可以更轻松地跟进:

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]]]

【讨论】:

  • 谢谢! @Daniel Kuppitz..我得到了您的查询所需的输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2013-06-06
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2019-10-31
  • 2016-05-01
相关资源
最近更新 更多