获取与指定RID顶点通过特定边类连接的顶点属性的OrientDB查询
解决OrientDB查询返回连接顶点完整属性的问题
你遇到的这个情况在OrientDB里挺常见——默认浏览模式只会返回顶点的RID链接,而不是我们需要的完整属性数据。别担心,用MATCH或者TRAVERSE语句就能轻松搞定,下面给你具体的实现方案:
方法1:使用MATCH语句(推荐,语义更清晰)
MATCH语法天生适合这种“通过边找关联顶点”的场景,它能直接展开关联顶点的所有属性。假设你的起始顶点RID是#X:Y,要查询的边类是YourEdgeClass,对应的查询语句如下:
MATCH {class: V, as: start, where: @rid = #X:Y} -[YourEdgeClass]-> {as: connected} RETURN connected
针对你的示例场景
比如如果你的起始顶点是某个特定RID(比如#50:0),目标边类是TargetEdge,要返回#68:0和#72:5的完整属性,语句就是:
MATCH {class: V, as: start, where: @rid = #50:0} -[TargetEdge]-> {as: connected} RETURN connected
执行后你会在结果里看到这两个顶点的所有属性字段,而不是单纯的RID链接。如果只需要特定属性,还可以精准指定返回字段:
MATCH {class: V, as: start, where: @rid = #50:0} -[TargetEdge]-> {as: connected} RETURN connected.id, connected.name, connected.description
方法2:使用TRAVERSE语句
如果你更习惯遍历类的语法,TRAVERSE也能实现同样的效果。它会从起始顶点出发,遍历指定边类的出边,返回所有关联顶点的完整数据:
TRAVERSE out('YourEdgeClass') FROM #X:Y RETURN *
这个语句会返回遍历路径上的所有顶点(包括起始顶点),如果只想保留关联的#68:0和#72:5,可以加个简单过滤:
TRAVERSE out('YourEdgeClass') FROM #X:Y WHERE @rid != #X:Y RETURN *
为什么默认查询只返回链接?
OrientDB的默认SELECT out('YourEdgeClass') FROM #X:Y属于“浅查询”,只会返回顶点的引用(RID链接);而MATCH和TRAVERSE是“深查询”,会自动展开顶点的属性数据,正好匹配你的需求。
内容的提问来源于stack exchange,提问作者not4fame
相关产品推荐
相关产品推荐

