如何确定Gremlin中是否放置了顶点?

时间:2019-02-12 08:01:57

标签: gremlin

我想尝试删除顶点,并且想知道是否删除了某些内容。 如果我愿意

g.V().has('name', 'deleteme').drop()

那么我就无法知道是否存在一个顶点。我总是得到一个空洞的结果。有办法说吗?

我认为我可以标记已删除的数据,然后选择它

g.V().has('name', 'deleteme').as('deleted').drop().select('deleted')

但这给我一个错误

Failed to execute query: g.V().has('name', 'deleteme').as('deleted').drop().select('deleted'): Script eval error: ActivityId : 959af7a4-b955-4127-be46-2dc160dd4ece ExceptionType : GraphCompileException ExceptionMessage : Gremlin Query Compilation Error: Column reference R_0["_value"] cannot be located in the raw records in the current execution pipeline. Source : Microsoft.Azure.Graphs GremlinRequestId : 959af7a4-b955-4127-be46-2dc160dd4ece Context : graphcompute Scope : graphstg-phyplan GraphInterOpStatusCode : QuerySyntaxError HResult : 0x80131500

有没有推荐的方法来实现这一目标?

(如果有区别,我正在将C#SDK用于Azure CosmosDB)

1 个答案:

答案 0 :(得分:2)

drop()步骤实际上既是副作用步骤,也是过滤步骤。这是一个副作用,因为它会使数据库发生变化,并产生副作用,因为它只会杀死流中的所有遍历器。除非引发异常,否则通常可以安全地假定已删除数据(如果数据首先存在-但这就是您想知道的)。

以现代玩具图为例,我认为最简单的方法是使用sideEffect()步骤,该步骤有效地迫使drop()仅表现为副作用:

gremlin> g.V().has('person','name','marko').sideEffect(drop()).constant('gone')
==>gone
gremlin> g.V().has('person','name','marko').sideEffect(drop()).constant('gone')
gremlin>

但是我不确定CosmosDB是否支持该步骤。我想您可以做到这一点,虽然它不那么直观和可读,但似乎可以完成同一件事:

gremlin> g.V().has('person','name','marko').union(constant('gone'),drop())
==>gone
gremlin> g.V().has('person','name','marko').union(constant('gone'),drop())
gremlin>