0

在 CosmosDB Graph 集合中,我试图找到所有类型typeA的节点,这些节点没有任何“活动”边指向 type 的节点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子句似乎没有过滤任何内容。

4

1 回答 1

1

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

g.V().hasLabel('typeA').
  not(outE().or(hasNot('softDelete'),
                has   ('softDelete', false)).
        inV().hasLabel('typeB'))
于 2019-11-18T01:17:06.790 回答