获取连接到所有当前顶点的顶点
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]]
我可能会问一个明显的问题,但对图形和 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]]