【问题标题】:Gremlin: find names of projects that have duplicates (by name)Gremlin:查找具有重复项的项目名称(按名称)
【发布时间】:2019-03-20 19:43:48
【问题描述】:

我的项目具有“名称”作为属性,我想生成重复项列表。我试图通过按名称对项目进行分组,并使用 where 子句过滤项目名称的计数大于 1 的结果并显示这些名称来做到这一点。

下面会生成一个项目名称列表以及每个项目的计数
g.V().hasLabel('project').groupCount().by('name')

所以我添加了过滤器以仅查找重复值,但它不起作用:
g.V().hasLabel('project').groupCount().by('name').where(select(values).is(gt(1))).values('name')

【问题讨论】:

    标签: orientdb gremlin


    【解决方案1】:

    你需要unfold()计数Map(),因此:

    g.V().hasLabel('project').
      groupCount().
        by('name').
      unfold().
      where(select(values).is(gt(1))).
      values('name')
    

    如果您不使用unfold(),那么您在管道中有一个Map,它会尝试将您的where() 作为一个整体应用到该对象,当您真的想将它应用到每个单独的键/值对时在Map.

    【讨论】:

    • 谢谢你,斯蒂芬。我跑了这个,但没有用。这是我得到的错误:java.lang.ClassCastException
    • 请提供一些示例数据,以便我可以在 Gremlin 控制台中专门针对您的查询重新创建问题 - 这是一个脚本示例:stackoverflow.com/questions/51388315/… fwiw,我确实尝试了上面遍历的本质在现代玩具图上,它运行良好。
    【解决方案2】:

    这对我有用:

    g.V().hasLabel('project')
    .group().by(values('name')
    .fold()).unfold().filter(select(values)
    .count(local).is(gt(1))).select(keys)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2013-08-26
      相关资源
      最近更新 更多