提供的开始未映射到值
The provided start does not map to a value
我有一个遍历如下:
g.V().hasLabel("demoUser")
.as("demoUser","socialProfile","followCount","requestCount")
.select("demoUser","socialProfile","followCount","postCount")
.by(__.valueMap())
.by(__.out("socialProfileOf").valueMap())
.by(__.in("followRequest").hasId(currentUserId).count())
.by(__.outE("postAuthorOf").count())
我正在尝试 select 用户顶点、他们链接的社交资料顶点和其他一些计数。问题是并非所有用户都具有 socialProfile
优势。在这种情况下,遍历失败并出现以下错误:
The provided start does not map to a value: v[8280]->[TitanVertexStep(OUT,[socialProfileOf],vertex), PropertyMapStep(value)]
我确实从 gremlin 团队找到了 this thread。我尝试用 coalesce()
包装 .by()
内部的逻辑,并且还附加了 .fold()
到语句的末尾,但没有成功。
如何使 selection 可选?我想 select 一个 socialProfile
如果存在,但总是 select demoUser
.
coalesce
是正确的选择。让我们假设现代图表中的人有一个或没有与之相关的项目:
gremlin> g.V().hasLabel("person").as("user","project").
select("user","project").by("name").by(coalesce(out("created").values("name"),
constant("N/A")))
==>{user=marko, project=lop}
==>{user=vadas, project=N/A}
==>{user=josh, project=ripple}
==>{user=peter, project=lop}
另一种方法是将其完全排除在结果之外:
g.V().hasLabel("person").as("user","project").choose(out("created"),
select("user","project").by("name").by(out("created").values("name")),
select("user").by("name"))
但很明显,只有每个分支 returns 一个映射/选择超过 1 个事物时,这才会看起来不错,否则你将得到混合结果类型。
我有一个遍历如下:
g.V().hasLabel("demoUser")
.as("demoUser","socialProfile","followCount","requestCount")
.select("demoUser","socialProfile","followCount","postCount")
.by(__.valueMap())
.by(__.out("socialProfileOf").valueMap())
.by(__.in("followRequest").hasId(currentUserId).count())
.by(__.outE("postAuthorOf").count())
我正在尝试 select 用户顶点、他们链接的社交资料顶点和其他一些计数。问题是并非所有用户都具有 socialProfile
优势。在这种情况下,遍历失败并出现以下错误:
The provided start does not map to a value: v[8280]->[TitanVertexStep(OUT,[socialProfileOf],vertex), PropertyMapStep(value)]
我确实从 gremlin 团队找到了 this thread。我尝试用 coalesce()
包装 .by()
内部的逻辑,并且还附加了 .fold()
到语句的末尾,但没有成功。
如何使 selection 可选?我想 select 一个 socialProfile
如果存在,但总是 select demoUser
.
coalesce
是正确的选择。让我们假设现代图表中的人有一个或没有与之相关的项目:
gremlin> g.V().hasLabel("person").as("user","project").
select("user","project").by("name").by(coalesce(out("created").values("name"),
constant("N/A")))
==>{user=marko, project=lop}
==>{user=vadas, project=N/A}
==>{user=josh, project=ripple}
==>{user=peter, project=lop}
另一种方法是将其完全排除在结果之外:
g.V().hasLabel("person").as("user","project").choose(out("created"),
select("user","project").by("name").by(out("created").values("name")),
select("user").by("name"))
但很明显,只有每个分支 returns 一个映射/选择超过 1 个事物时,这才会看起来不错,否则你将得到混合结果类型。