0

我对图形数据库和 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 步骤(这些)来解决我的问题。

4

1 回答 1

2

只需替换filterwhere. 查询将同样工作。

于 2019-09-02T18:26:26.093 回答