Gremlin如何在单条查询中获取出边及其目标顶点
当然可以用单条Gremlin查询同时获取出边和目标顶点!
完全没问题,Gremlin有好几种灵活的写法能一次性拿到边的属性和对应的目标顶点信息,不用分开查。给你几个实用的方案:
方案1:用project()自定义返回结构
这是最直观的方式,你可以明确指定返回的字段和对应的数据:
G.V().hasId("something") .outE() .project("edgeProperties", "targetVertex") .by(valueMap()) // 获取这条边的所有属性,也可以指定特定属性比如by("weight", "label") .by(inV().valueMap(true)) // inV()拿到目标顶点,valueMap(true)会包含顶点ID和所有属性
如果不需要所有属性,只想要特定字段,直接把valueMap()换成指定属性列表就行,比如by("name", "age", T.id)来获取顶点的名字、年龄和ID。
方案2:用as()+select()链式关联
这种写法适合一步步关联边和顶点,然后一次性取出:
G.V().hasId("something") .outE().as("edge") // 给当前出边起别名"edge" .inV().as("vertex") // 拿到目标顶点并起别名"vertex" .select("edge", "vertex") .by(valueMap()) .by(valueMap(true))
这样返回的结果会是包含edge和vertex两个键的Map,分别对应边和顶点的信息。
方案3:用map()构造嵌套结果
如果你想要把顶点信息嵌套在边的结果里,可以用map()来组合:
G.V().hasId("something") .outE() .map( __.valueMap().with("targetVertex", __.inV().valueMap(true)) )
这个查询会返回每条边的属性Map,里面额外包含一个targetVertex键,对应目标顶点的信息。
根据你的实际需求选合适的写法就行,要是需要更细粒度的控制,还可以在by()里加更多筛选或者转换逻辑~
内容的提问来源于stack exchange,提问作者silverberry
相关产品推荐
相关产品推荐

