【问题标题】:Gremlin - Select vertices based on group keysGremlin - 根据组键选择顶点
【发布时间】:2020-02-13 09:31:10
【问题描述】:

我有一个图,其中包含 2 个不同的顶点类,它们具有一些相同的属性。

我需要:

  1. 根据某些属性对 Item 类的所有顶点进行分组
  2. 找到具有这些属性的 Product 类的顶点
g.addV("Item").
    property("color", "green").
    property("material", "wood").
    property("shape", "round").
    property("price", 1.2).
  addV("Item").
    property("color", "green").
    property("material", "wood").
    property("shape", "round").
    property("price", .9).
  addV("Item").
    property("color", "green").
    property("material", "wood").
    property("shape", "square").
    property("price", 5).
  addV("Product").
    property("color", "green").
    property("material", "wood").next();

到目前为止我尝试过的是这个

g.V().has("Item", "price", P.inside(0, 10)).
  group().
    by(project("c", "m").
      by("color").by("material")). //\1
    local(unfold().
      project("color", "material","price","product")
        .by(select(Column.keys).select("c"))
        .by(select(Column.keys).select("m"))
        .by(select(Column.values).unfold().values("price").mean())
        .by(
          V().hasLabel("Product"). //\2
          has("material",P.eq(select(Column.keys).select("c"))).fold()));

我了解2 的范围发生了变化,因此select(Column.keys) 不再指代该组。 但是,我不知道如何将c(和m)键的值放入2的遍历中

【问题讨论】:

    标签: gremlin tinkerpop3


    【解决方案1】:

    所以我尝试用稍微不同的方法来解决它。

    每个组都会有颜色和材料组合的所有项目和产品

    这样大部分工作将在您的第一个group 步骤中完成:

    g.V().coalesce(
        hasLabel("Item").has("price", P.inside(0, 10)),
        hasLabel("Product").has("color").has("material")
        ).group()
        .by(project("c", "m").by("color").by("material"))
        .unfold()
        .where(select(values).unfold().hasLabel("Item"))
          .project("color", "material","price","product")
            .by(select(keys).select("c"))
            .by(select(keys).select("m"))
            .by(select(values).unfold().hasLabel("Item").values("price").mean())
            .by(select(values).unfold().hasLabel("Product").fold())
    

    【讨论】:

    • 谢谢你的作品。你能澄清一下,为什么?来自文档coalesce - 返回第一次遍历的结果以发出至少一个元素。那为什么产品还要在群里呢?我将其读作“如果第一次遍历有元素,则其他元素不做”
    • 没关系,组接受遍历器的所有元素,因此它首先“耗尽”项目遍历,然后是产品。我很困惑,因为到目前为止我看到的合并最常见的用途是添加一个顶点,如果它不存在,那么你只消耗 1 个元素,使用 next
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多