CosmosDB Gremlin-过滤没有特定边缘类型的节点

时间:2019-11-14 14:43:17

标签: azure-cosmosdb gremlin azure-cosmosdb-gremlinapi

在CosmosDB Graph集合中,我试图找到所有类型为{strong>不且没有“活动”边指向类型为typeA的节点的类型typeB的所有节点。 。

某些边缘可能被“软删除”(即g.E().has('softDeleted', true))。这些边缘应该被忽略。

这是我尝试过的:

g.V().hasLabel('typeA')
-> returns 10 nodes of type "typeA", as expected

g.V().hasLabel('typeA')
     .outE().not(has('softDelete', true))
     .inV().hasLabel('typeB')
-> returns 2 nodes of type "typeB", as expected

g.V().hasLabel('typeA')
     .where( // same condition as above, inside a 'where' clause
         outE().not(has('softDelete', true))
         .inV().hasLabel('typeB')
         .count().is(eq(0))   // " where there are no such edges"
     )
-> returns all 10 nodes of type "typeA" again ?!

在上面的查询中,应用where子句似乎没有过滤任何内容。

1 个答案:

答案 0 :(得分:1)

以下查询将查找所有不具有typeA顶点边的typeB顶点。仅考虑没有softDelete属性的边或将softDelete设置为false的边,其他边将被忽略。

g.V().hasLabel('typeA').
  not(outE().or(hasNot('softDelete'),
                has   ('softDelete', false)).
        inV().hasLabel('typeB'))