GroupCount订单依据

时间:2018-03-19 09:19:43

标签: java gremlin simplegraph

下面的simplegraph-core测试套件的单元测试代码显示了机场的区域数量,但没有像我预期的那样订购。

结果以:

开头
NZ-BOP=  3
MZ-A=  1
MZ-B=  1
IN-TN=  5
MZ-N=  1
PW-004=  1
MZ-I=  2
BS-FP=  1
IN-TR=  1
MZ-T=  1
BJ-AQ=  1
GB-ENG= 27

我调查了

并搜索" GroupCount"在问题标记格雷姆林无济于事

有什么必要修理订单?

单元测试 另见https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/simplegraph-core/src/test/java/com/bitplan/simplegraph/core/TestTinkerPop3.java

  @Test
  public void testSortedGroupCount() throws Exception {
    Graph graph = getAirRoutes();
    GraphTraversalSource g = graph.traversal();
    Map<Object, Long> counts = g.V().hasLabel("airport").groupCount()
        .by("region").order().by(Order.decr).next();
    assertEquals(1473, counts.size());
    for (Object key : counts.keySet()) {
      System.out.println(String.format("%s=%3d", key, counts.get(key)));
    }
  }

2 个答案:

答案 0 :(得分:4)

您需要使用values范围界定local订购

g.V().hasLabel("airport").
  groupCount().
    by("region").
  order(local).
    by(values, Order.decr)

使用local确定您在当前遍历器中的顺序(即在遍历中对每个Map的内容进行排序)。

  @Test
  public void testSortedGroupCount() throws Exception {
    Graph graph = getAirRoutes();
    GraphTraversalSource g = graph.traversal();
    Map<Object, Long> counts = g.V().hasLabel("airport").groupCount()
        .by("region").order(Scope.local).by(Column.values,Order.decr).next();
    // https://stackoverflow.com/a/49361250/1497139
    assertEquals(1473, counts.size());
    assertEquals("LinkedHashMap",counts.getClass().getSimpleName());
    debug=true;
    if (debug)
      for (Object key : counts.keySet()) {
        System.out.println(String.format("%s=%3d", key, counts.get(key)));
      }

  }

然后会显示:

US-AK=149
AU-QLD= 50
CA-ON= 46
CA-QC= 44
PF-U-A= 30
US-CA= 29

答案 1 :(得分:0)

仅使用Gremlin语言,就可以使用展开方法来完成。如果您需要通过REST API运行查询,这可能会很有用。

{{1}}