我对图形数据库和 gremlin 相当陌生,并且我遇到了与其他人类似的问题,请参阅这个问题,因为我正在尝试获取满足所选项目的所有标准的资源顶点。所以对于下图
- 项目 1 应返回资源 1 和资源 2。
- 第 2 项应仅返回资源 2。
这是创建示例数据的脚本:
g.addV("Resource").property("name", "Resource1")
g.addV("Resource").property("name", "Resource2")
g.addV("Criteria").property("name", "Criteria1")
g.addV("Criteria").property("name", "Criteria2")
g.addV("Item").property("name", "Item1")
g.addV("Item").property("name", "Item2")
g.V().has("Resource", "name", "Resource1").addE("isOf").to(g.V().has("Criteria", "name", "Criteria1"))
g.V().has("Resource", "name", "Resource2").addE("isOf").to(g.V().has("Criteria", "name", "Criteria1"))
g.V().has("Resource", "name", "Resource2").addE("isOf").to(g.V().has("Criteria", "name", "Criteria2"))
g.V().has("Item", "name", "Item1").addE("needs").to(g.V().has("Criteria", "name", "Criteria1"))
g.V().has("Item", "name", "Item2").addE("needs").to(g.V().has("Criteria", "name", "Criteria1"))
g.V().has("Item", "name", "Item2").addE("needs").to(g.V().has("Criteria", "name", "Criteria2"))
当我尝试以下操作时,我得到资源 1 和 2,因为它正在查看与这两个标准相关的所有资源,而我只想要与这两个标准(资源 2)匹配的资源。
g.V()
.hasLabel('Item')
.has('name', 'Item2')
.outE('needs')
.inV()
.aggregate("x")
.inE('isOf')
.outV()
.dedup()
因此,如果我尝试以下操作,正如引用的问题所暗示的那样。
g.V()
.hasLabel('Item')
.has('name', 'Item2')
.outE('needs')
.inV()
.aggregate("x")
.inE('isOf')
.outV()
.dedup()
.filter(
out("isOf")
.where(within("x"))
.count()
.where(eq("x"))
.by()
.by(count(local)))
.valueMap()
我收到以下异常,因为为其他问题提供的答案在 Azure CosmosDB 图形数据库中不起作用,因为它不支持 gremlin Filter 语句。
提交查询失败:gV().hasLabel('Item').has('name', 'Item2').outE('needs').inV().aggregate("x").inE('isOf' ).outV().dedup().filter(out("isOf").where(within("x")).count().where(eq("x")).by().by(count (本地))).valueMap(): "脚本评估错误: \r\n\nActivityId : d2eccb49-9ca5-4ac6-bfd7-b851d63662c9\nExceptionType : GraphCompileException\nExceptionMessage :\r\n\tGremlin 查询编译错误: 无法在第 1 行第 113 列找到任何方法“过滤器”。\r\n\t1 错误\n来源:Microsoft.Azure.Cosmos.Gremlin.Core\n\tGremlinRequestId:d2eccb49-9ca5-4ac6-bfd7-b851d63662c9\ n\tContext : graphcompute\n\tScope : graphparse-translate-csharpexpressionbinding\n\tGraphInterOpStatusCode : QuerySyntaxError\n\tHResult : 0x80131500\r\n"
我很想知道是否有办法通过 MS 在 Azure CosmosDB 中提供的 gremlin 步骤(这些)来解决我的问题。