CosmosDB Graph Api支持有没有?

时间:2017-09-17 05:16:19

标签: gremlin azure-cosmosdb

我正在测试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'))

1 个答案:

答案 0 :(得分:0)

不幸的是,hasNot()步骤目前没有在CosmosDB Graph上公开,这看起来是我们的疏忽。

我已将此问题添加到我们的待办事项中,并且由于它似乎已部分实施,因此可能会在下一次服务发布时使用(约2周)。