我正在尝试创建一个遍历,该遍历添加一个顶点,然后将已知顶点的边添加到新顶点。我有一个库方法,用于coalesce
检查是否存在现有边缘(它不可能存在),如果不存在则添加它。但是,我可靠地将边添加到第一个子顶点,然后没有边添加到新的子顶点。这是遍历:
gts.addV()... // add properties and such; this part reliably works
.as('newV') // needed because I can't pass __addV() to the edge coalesce or I get two adds
.V(parent)
.coalesce(
__.outE('Manages').where(inV().has(id, __select('newV').id())).hasNot(TTL_END),
__.addE('Manages').to(__select('newV')).property(TTL_START, now)
)
当我分析这个遍历时,我在添加第二个和后续子顶点时发现了一些奇怪的东西:
CoalesceStep([[VertexStep(OUT,[Manages],edge), ... 1 1 0.469 18.82
VertexStep(OUT,[Manages],edge) 1 1 0.020
TraversalFilterStep([EdgeVertexStep(IN), Prof... 1 1 0.188
EdgeVertexStep(IN) 1 1 0.010
TraversalFilterStep([IdStep, ProfileStep, S... 0.091
IdStep 1 1 0.010
SelectOneStep(last,newV) 1 1 0.020
NoOpBarrierStep(2500) 1 1 0.019
IdStep 0.012
NotStep([PropertiesStep([ttl.end],value), Pro... 1 1 0.170
PropertiesStep([ttl.end],value) 0.008
EdgeVertexStep(IN) 1 1 0.305 12.23
据我所知,这似乎是说“id
过滤器”正在过滤掉不匹配的新孩子1并因此不返回任何遍历器(这是我所期望的),但是接下来是hasNot
我希望应用的步骤在接下来的管道中,弹出回到顶层,说“边缘(对第一个孩子)没有ttl.end
,所以我会退回它!”,coalesce
接受它,但我没有得到我的优势第二个孩子。
我的理解是,一旦遍历器“死亡”,额外的过滤步骤将被简单地丢弃为多余的,并且不会通过遍历传播更多内容,但我期望作为 AND 过滤器的行为似乎是“复活”遍历ID过滤器应该已经“杀死”。
为什么NotStep
即使它的上游过滤器不应该匹配,也会被遍历?我怎样才能产生我想要的复合谓词?
(我也先尝试了这个hasNot
步骤,我得到了相同的结果,在配置文件输出中转换了步骤。)
1在第二个“IdStep”上根本没有任何遍历器是否表明存在问题?