You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TinkerPop技术问询:查询未关联Software顶点的Person顶点

解决TinkerPop Modern中查找未关联Software的Person顶点问题

我来帮你搞定这个查询问题!你的需求是找出TinkerPop Modern数据库中所有未直接连接到「Software」类型顶点的「Person」顶点,先分析下你现有代码的问题,再给出正确的实现。

先回顾你的可用代码

你已经能正确查询到关联了Software的Person,这段代码没问题:

g.V().hasLabel("Person").as("from")
 .project("title", "node")
 .by(select("from").unfold().values("name").fold())
 .by(select("from").unfold().label().fold())

你的错误查询问题所在

你写的filter(both().not(hasLabel("Software")))逻辑不对:这个写法会检查当前Person的邻居中是否存在不是Software的顶点,只要有一个邻居不是Software,就会保留这个Person——但这和你的需求完全相反!你需要的是这个Person没有任何Software类型的邻居,所以必须用not()包裹“存在Software邻居”的判断。

正确的查询写法

这里给出两种可靠的实现方式,都能准确筛选出未关联Software的Person:

方式一:用not()直接排除有Software邻居的Person

这是最直观的写法,直接判断当前Person不存在任何方向连接到Software的边:

g.V().hasLabel("Person")
  .not(both().hasLabel("Software"))
  .project("title", "node")
  .by(values("name").fold())
  .by(label().fold())

方式二:用where()配合not做更细致的判断

和方式一逻辑一致,只是用where()语法来表达,可读性同样很好:

g.V().hasLabel("Person")
  .where(not(both().hasLabel("Software")))
  .project("title", "node")
  .by(values("name").fold())
  .by(label().fold())

验证结果

在TinkerPop Modern标准数据集中,只有vadas这个Person顶点没有关联任何Software,所以上述查询会只返回vadas的相关数据,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Srinath Ganesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:37:56