如何解决Gremlin P.eq 可以接受顶点吗?
我正在尝试应用 Element Existence recipe 以仅插入一条被视为“有效”(而非“过期”)的边:
def to = __.V(member).hasLabel('Member')
gts.V(group).hasLabel('Group')
.coalesce(
__.outE('Includes').hasNot('ttl.end').where(__.inV().is(P.eq(to))),__.addE('Includes').to(to).property('ttl.start',timestamp)
)
.next()
我的期望是合并将选择没有 ttl.end
属性并且与同一个 to
顶点关联的现有边,否则插入新边。但是,无论如何总是会插入一条新边。我将此解释为表明第一个子遍历与现有的实时边缘不匹配,但我不知道为什么。谓词 P.eq
是否适用于 Traversal<?,Vertex>
参数?如果不是,那么“边在顶点 to
上的终止位置”的正确说法是什么?
配置文件(我注意到 Isstep
没有遍历器,我认为这意味着它不匹配):
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TinkergraphStep(vertex,[08f8c62d-5429-40e6-84b7... 1 1 0.135 10.93
CoalesceStep([[VertexStep(OUT,[Includes],edge),... 1 1 0.781 63.17
VertexStep(OUT,edge) 2 2 0.025
NotStep([Propertiesstep([ttl.end],value),Pro... 1 1 0.127
Propertiesstep([ttl.end],value) 0.033
TraversalFilterStep([EdgeVertexStep(IN),Prof... 0.144
EdgeVertexStep(IN) 1 1 0.014
Isstep(eq([TinkergraphStep(vertex,[d9b69296... 0.018
AddEdgeStep({ttl.start=[Thu Jan 28 21:27:52 C... 1 1 0.220
TinkergraphStep(vertex,[d9b69296-333e-4e54-... 1 1 0.120
解决方法
两者都可以:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6],standard]
gremlin> v = g.V(1).next()
==>v[1]
gremlin> g.V().bothE().where(outV().is(v))
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]
==>e[7][1-knows->2]
==>e[9][1-created->3]
==>e[8][1-knows->4]
gremlin> g.V().bothE().where(outV().is(eq(v)))
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]
==>e[7][1-knows->2]
==>e[9][1-created->3]
==>e[8][1-knows->4]
请注意,您的代码示例并未显示您向 Vertex
或 is()
提供 eq()
。以下:
def to = __.V(member).hasLabel('Member')
永远不会得到 Vertex
,因为 traversal is not iterated。因此,to
只是一个 Traversal
,它肯定不会在您的 where()
中提供任何匹配项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。