查询有关创建的节点数或添加的边数的统计信息

Query statistics on number of nodes created or edges added

OpenCypher 提供有关作为查询执行结果创建的节点数或更新的边数的统计信息:

queryResult.summary?.updateStatistics?.updates()?.nodesCreated

我正在尝试寻找 Gremlin 是否有类似的机制; explain/profile API return 谓词但不是 edges/nodes 受影响人数的信息。

如果有任何见解,我将不胜感激。

编辑: 例如,下面的查询:

const traversal = this.__.addV(label) .property(GREMLIN_ID, id) .property("created_timestamp", new Date().getTime()); this.logger.info("Add vertex if not exist "); 
const v = await this.g .V(id) .fold() .coalesce(this.__.unfold(), traversal) .elementMap() .next(); 
return v.value;

只有当新顶点不存在时才会添加它;但是,当它确实被执行时,想知道是否有办法查看由于查询执行而添加的“新”节点的数量。

更新: 使用 Kevin 的解决方案,也能够检索边数:

g.inject(0).store('edgeCount').coalesce(
          V('0000x', 'facade00-0000-4000-a000-000000000000')
          .hasLabel("FINGERPRINT")
          .outE()
          .where(V().with('0000x', 'facade00-0000-4000-a000-000000000000')),
        V('0000x', 'facade00-0000-4000-a000-000000000000')
        .hasLabel("FINGERPRINT")
        .as("from")
        .V('0000x', 'facade00-0000-4000-a000-000000000000')
        .hasLabel("RDC_VISITOR_ID")
        .as("to")
        .addE("ANONYMOUS")
        .from("from")
        .to("to")
        .sideEffect(constant(1).store('edgeCount'))
      ).project('edge','count').by().by(cap('edgeCount').unfold().sum())

这给出:

{'edge': e[191][0000x-ANONYMOUS->facade00-0000-4000-a000-000000000000], 'count': 1}

随着进一步的执行,计数变为 0。谢谢!

这是一种使用 store 跟踪查询完成的工作的方法。我无法使用 sack 让它按照我想要的方式工作。如果我弄明白了,我会更新答案。

计数应该是 1,因为我们正在创建一个新顶点。

gremlin> g.inject(0).store('x').
......1>   V('A1').
......2>   fold().
......3>   coalesce(
......4>     unfold(),
......5>     addV('test').property(id,'A1').sideEffect(constant(1).store('x'))).
......6>   project('vertex','count').
......7>     by().
......8>     by(cap('x').unfold().sum()) 
==>[vertex:v[A1],count:1]

现在已经创建,所以计数应该是0。

gremlin> g.inject(0).store('x').
......1>   V('A1').
......2>   fold().
......3>   coalesce(
......4>     unfold(),
......5>     addV('test').property(id,'A1').sideEffect(constant(1).store('x'))).
......6>   project('vertex','count').
......7>     by().
......8>     by(cap('x').unfold().sum()) 

==>[vertex:v[A1],count:0]