【问题标题】:Gremlin: dedup() with groups of vertices not workingGremlin:带有顶点组的 dedup() 不起作用
【发布时间】:2020-07-18 00:09:04
【问题描述】:

我有一个查询返回这样的用户组:

==>[britney,ladygaga,aguilera]
==>[aguilera,ladygaga,britney]

这 2 个示例组具有相同的项目以不同的顺序,问题是 dedup() 在这种情况下不会删除其中一个组,因为具有不同顺序的项目会使它们对于 dedup 不同。

我能想到的唯一解决方案是在每个组中调用 order(),以便它们具有相同的顺序并且 dedup() 有效。但是这个解决方案意味着:

  1. 额外的计算只是因为 dedup 无法处理这种情况
  2. 我必须添加一条丑陋的评论,例如“这是为了使重复数据删除工作”

还有其他解决方案吗?

您可以在 gremlin 控制台中使用以下几行尝试我上面的示例:

g.addV("user").property("name", "britney")
g.addV("user").property("name", "aguilera")
g.addV("user").property("name", "ladygaga")

重复数据删除工作:

g.V().hasLabel("user").values("name").fold().store("result").V().hasLabel("user").values("name").fold().store("result").select("result").unfold().dedup()

重复数据删除无法正常工作,因为项目被打乱了:

g.V().hasLabel("user").values("name").order().by(shuffle).fold().store("result").V().hasLabel("user").values("name").order().by(shuffle).fold().store("result").select("result").unfold().dedup()

【问题讨论】:

    标签: gremlin tinkerpop tinkerpop3 gremlin-server


    【解决方案1】:

    您必须order() 列表才能使它们具有平等性:

    gremlin> g.V().hasLabel("user").values("name").order().by(shuffle).fold().store("result").
    ......1>   V().hasLabel("user").values("name").order().by(shuffle).fold().store("result").
    ......2>   select("result").unfold().order(local).dedup()
    ==>[aguilera,britney,ladygaga]
    

    这是标准的列表相等性:

    gremlin> [1,2,3] == [1,2,3]
    ==>true
    gremlin> [1,2,3] == [3,2,1]
    ==>false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 2020-08-15
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多