获取连接到所有当前顶点的顶点

Getting vertices that are connected to ALL current vertices

我可能会问一个明显的问题,但对图形和 gremlin 语言不熟悉,所以有点卡住了。

我有一个图表设置,我可以在其中找到特定类型的 N 个顶点。 假设我找到了 2 个 X 类型的顶点。 这些顶点有 K 个类型为 Y 的顶点的边。

我想找到类型 Y 的顶点,它们都与我找到的类型 X 的 3 个顶点相连。在这种情况下,类型 Y 的顶点可以连接到类型 X 的 3 个顶点中的任何一个,但我只想得到普通的。

创建示例数据的脚本```

g.addV("X1").property("name", "category1")
g.addV("X2").property("name", "category2")


g.addV("Y").property("name", "y1")
g.addV("Y").property("name", "y2")
g.addV("Y").property("name", "y3")


g.V().has("Y", "name", "y1").addE("isOf").to(g.V().has("X1", "name", "category1"))
g.V().has("Y", "name", "y1").addE("isOf").to(g.V().has("X2", "name", "category2"))

g.V().has("Y", "name", "y2").addE("isOf").to(g.V().has("X1", "name", "category1"))
g.V().has("Y", "name", "y2").addE("isOf").to(g.V().has("X2", "name", "category2"))

g.V().has("Y", "name", "y3").addE("isOf").to(g.V().has("X1", "name", "category1"))

```

我感兴趣的发现是 "Y" 具有 isOf 类别 1 和类别 2 的顶点,以及可能更多的类别。我需要消除仅连接到指定类别的子集的顶点 Y。

聚合名为x的集合中的所有源顶点,然后遍历所有y个顶点并验证每个y个顶点有n条边通往存储在 x 中的顶点(其中 n 等于 x 的大小)。

gremlin> g.V().hasLabel("X1","X2").aggregate("x").
           in("isOf").dedup().
           filter(out("isOf").where(within("x")).count().
                  where(eq("x")).
                    by().
                    by(count(local))).
           valueMap()
==>[name:[y1]]
==>[name:[y2]]