Gremlin:将查询的输出构建为二维数组
Gremlin: Build the output of the query as a 2D array
我想在二维数组中获取图形中所有用户的好友列表,格式如下:
[
[friend, friend, friend],
[friend, friend, friend],
[friend, friend, friend],
]
我想出了这个查询:
g.V().hasLabel("user").both("friend");
但是那个查询 returns 所有用户的朋友并将其放入同一个列表,这不是我想要的,我想要一个二维数组,其中每个项目都是每个用户的朋友列表。
我需要什么来实现这个目标?
您可以通过使用 project(), select(), as well as fold()/unfold() 步骤以所需的方式格式化遍历结果来完成此操作。例如,如果我 运行 下面对 TinkerPop 中的现代图进行遍历:
g.V().project('foff').
by(
both().fold().
project('foff').
by(
unfold().both().fold()
)
).
select(values).unfold().
select(values).fold()
我得到这样的二维数组答案:
[
[[v[1],v[4],v[6],v[1],v[5],v[3],v[1]]],
[[v[3],v[2],v[4]]],
[[v[3],v[2],v[4],v[5],v[3],v[1],v[3]]],
[[v[4],v[1],v[4],v[6],v[3],v[2],v[4]]],
[[v[5],v[3],v[1]]],[[v[1],v[4],v[6]]]
]
自己回复:
bechbd 响应是正确的,但更简单易读的解决方案是像这样使用 flatMap()
:
g.hasLabel("user").flatMap(both("friend").fold())
我想在二维数组中获取图形中所有用户的好友列表,格式如下:
[
[friend, friend, friend],
[friend, friend, friend],
[friend, friend, friend],
]
我想出了这个查询:
g.V().hasLabel("user").both("friend");
但是那个查询 returns 所有用户的朋友并将其放入同一个列表,这不是我想要的,我想要一个二维数组,其中每个项目都是每个用户的朋友列表。
我需要什么来实现这个目标?
您可以通过使用 project(), select(), as well as fold()/unfold() 步骤以所需的方式格式化遍历结果来完成此操作。例如,如果我 运行 下面对 TinkerPop 中的现代图进行遍历:
g.V().project('foff').
by(
both().fold().
project('foff').
by(
unfold().both().fold()
)
).
select(values).unfold().
select(values).fold()
我得到这样的二维数组答案:
[
[[v[1],v[4],v[6],v[1],v[5],v[3],v[1]]],
[[v[3],v[2],v[4]]],
[[v[3],v[2],v[4],v[5],v[3],v[1],v[3]]],
[[v[4],v[1],v[4],v[6],v[3],v[2],v[4]]],
[[v[5],v[3],v[1]]],[[v[1],v[4],v[6]]]
]
自己回复:
bechbd 响应是正确的,但更简单易读的解决方案是像这样使用 flatMap()
:
g.hasLabel("user").flatMap(both("friend").fold())