查找连接到所有当前顶点的顶点

时间:2019-09-02 16:42:37

标签: azure gremlin tinkerpop azure-cosmosdb-gremlinapi

我对绘制db和gremlin非常陌生,并且我遇到了与其他人类似的问题,请参见this question,因为我正在尝试获取满足所选项目的所有条件的资源顶点。所以对于下图

enter image description here

  • 项目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图形数据库中不起作用,为it doesn't support the gremlin Filter statement

  

提交查询失败: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(local)))。valueMap():“脚本评估错误:\ r \ n \ nActivityId:d2eccb49-9ca5-4ac6-bfd7-b851d63662c9 \ nExceptionType:GraphCompileException \ nExceptionMessage:\ r \ n \ tGremlin查询编译错误:找不到任何方法'filter'@第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(these)中提供的gremlin步骤。

1 个答案:

答案 0 :(得分:2)

只需将filter替换为where。 该查询将同样起作用。