当部分查询 returns 什么都没有时,Gremlin 查询不返回任何结果
Gremlin query is returning no results when part of the query returns nothing
我有一个 gremlin 查询,它可以找到我想要存档的顶点,但它 return 是一个空数组。
我的图形布局方式是一个顶点可以有多个父节点和子节点。当一个顶点被存档时,它需要存档所有受影响的后代,这些后代将被这个过程'orphaned'。如果任何后代有返回中心顶点的路径,则不应将其存档,因为它不会 'orphaned'
g.V(itemId) // Find the item to delete.
.union( // Start a union to return
g.V(itemId), // both the item
g.V(itemId) // and its descendants.
.repeat(__.inE('memberOf').outV().store('x')) // Find all of its descendants.
.cap('x').unfold() // Unfold them.
.where(repeat(out('memberOf') // Check each descendant
.where(hasId(neq(itemId))).simplePath()) // to see if it has a path back that doesn't go through the original vertex
.until(hasId(centralId))) // that ends at the central vertex .
.aggregate('exception') // Aggregate these together.
.select('x').unfold() // Get all the descendants again.
.where(without('exception'))) // Remove the exceptions.
.property('deleted', true) // Set the deleted property.
.valueMap(true) // Rteurn the results.
当它发现一些后代有返回中心顶点但不经过原始顶点的路径时,它就会工作并且returns 它应该的所有结果。但是,如果它找不到任何具有返回路径的后代,那么理论上它应该只是 return 所有后代。相反,它是 returning 一个空数组。我的猜测是它在遍历的那个阶段后卡住了,因为它什么也没找到,因此无法继续进行任何其他操作。
如果在那个阶段什么都找不到,我如何return所有后代?
有关图表的示例,请参阅 。
换行:
.select('x').unfold()
收件人:
.cap('x').unfold()
我有一个 gremlin 查询,它可以找到我想要存档的顶点,但它 return 是一个空数组。
我的图形布局方式是一个顶点可以有多个父节点和子节点。当一个顶点被存档时,它需要存档所有受影响的后代,这些后代将被这个过程'orphaned'。如果任何后代有返回中心顶点的路径,则不应将其存档,因为它不会 'orphaned'
g.V(itemId) // Find the item to delete.
.union( // Start a union to return
g.V(itemId), // both the item
g.V(itemId) // and its descendants.
.repeat(__.inE('memberOf').outV().store('x')) // Find all of its descendants.
.cap('x').unfold() // Unfold them.
.where(repeat(out('memberOf') // Check each descendant
.where(hasId(neq(itemId))).simplePath()) // to see if it has a path back that doesn't go through the original vertex
.until(hasId(centralId))) // that ends at the central vertex .
.aggregate('exception') // Aggregate these together.
.select('x').unfold() // Get all the descendants again.
.where(without('exception'))) // Remove the exceptions.
.property('deleted', true) // Set the deleted property.
.valueMap(true) // Rteurn the results.
当它发现一些后代有返回中心顶点但不经过原始顶点的路径时,它就会工作并且returns 它应该的所有结果。但是,如果它找不到任何具有返回路径的后代,那么理论上它应该只是 return 所有后代。相反,它是 returning 一个空数组。我的猜测是它在遍历的那个阶段后卡住了,因为它什么也没找到,因此无法继续进行任何其他操作。
如果在那个阶段什么都找不到,我如何return所有后代?
有关图表的示例,请参阅
换行:
.select('x').unfold()
收件人:
.cap('x').unfold()