Gremlin - 根据分组键选择顶点

4

我有一个包含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处的遍历中。
1个回答

2

因此,我尝试用稍微不同的方法来解决它。

每个组都将拥有所有颜色和材料组合的物品和产品

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

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 - 返回第一个遍历发出至少一个元素的结果_。那么为什么产品甚至在组内呢?我理解为“如果第一个遍历有元素,则不执行其他遍历”。 - Denis Kirchhübel
1
没关系,group接收遍历器的所有元素,因此它首先“耗尽”项遍历,然后是产品遍历。 我感到困惑的原因是到目前为止我看到coalesce最常见的用法是添加一个顶点,如果它不存在,但是这样你只使用了1个元素,使用next - Denis Kirchhübel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接