我正在测试CosmosDB的Gremlin支持,并且正在考虑在查询步骤中使用hasNot。根据{{3}}我可以找到
has - 用于过滤属性,顶点和边。支持hasLabel,hasId,hasNot,并且有变种。
使用Gremlin控制台中的默认Azure示例图表,我可以运行
gremlin> :> g.V().has('firstName')
并得到我预期的合理结果,
gremlin> :> g.V().hasNot('firstName')
带来了非常自信的启发Azure的堆栈跟踪响应(以防万一将其删除)。
Gremlin Query Compilation Error: Traversal Script: Failed to compile query:
(1,74): error CS1061: Type `Microsoft.Azure.Graphs.GraphTraversal' does not contain a definition for `hasNot' and no extension method `hasNot' of type `Microsoft.Azure.Graphs.GraphTraversal' could be fou$
d. Are you missing an assembly reference?
D:\local\Temporary ASP.NET Files\root\<removed>\<removed>\assembly\dl3\<removed>\<removed>\Microsoft.Azure.Graphs.dll (Location of the symbol related to previous error)
ExceptionType : GraphCompileException
Source : Microsoft.Azure.Graphs
Context : <removed>
RequestId : <removed>
Scope : graphcmd-emitcode
Status : ScriptEvaluationError
HResult : 0x80131500
at Microsoft.Azure.Graphs.Common.MonoTraversalScript.HandleCompileError(Tuple`2& evaluationContext)
at Microsoft.Azure.Graphs.Common.MonoTraversalScript.Compile()
at Microsoft.Azure.Graphs.GraphCommand.<ExecuteTraversalAsync>b__38_0()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Azure.Graphs.GraphCommand.<ExecuteTraversalAsync>d__38.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Azure.Graphs.GremlinServer.DefaultGraphRequestProcessor.<CreateGremlinResponseInternalAsync>d__13.MoveNext()
关键部分当然是第一行的部分似乎表示hasNot未在Azure的.NET dll中正确定义,用于在服务器上编译查询。
类似的结果来自仪表板中的查询资源管理器。
这可以通过
解决(至少在某种程度上)gremlin> :> g.V().not(has('firstName'))
答案 0 :(得分:0)
不幸的是,hasNot()
步骤目前没有在CosmosDB Graph上公开,这看起来是我们的疏忽。
我已将此问题添加到我们的待办事项中,并且由于它似乎已部分实施,因此可能会在下一次服务发布时使用(约2周)。