我想尝试删除顶点,并且想知道是否删除了某些内容。 如果我愿意
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)
答案 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>