apache TinkerPop gremlin 如何从路径结果中过滤起始顶点?

问题描述 投票:1回答:1

伙计们!我是新来的gremlin,我需要帮助。我是gremlin的新手,我需要一个帮助。

我想知道是否有一种方法可以根据邻居属性中的值在全图中对每个节点进行聚合?

举个例子:我想计算每个节点的平均金额。我想计算一个 "已知 "客户的平均消费金额。

我的图结构如下。

Customer1 -- > Phone_Number < -- Customer2.

所以我想得到,作为结果,下一个。

  • Customer1 Mean(Neighbors. value('money'))
  • Customer2 Mean(Neighbors.value('money'))
  • ...

一个客户(基节点)的邻居是所有其他客户(除了他自己)连接到一个(或多个)与基节点相关联的电话.我明白如果我知道ID,如何排除基节点,但有没有一种方法可以在全图中进行计算,自动排除 "起始 "节点?比如,如果我们沿着所有路径从CustomerK开始,忽略CustomerK?

另一个小问题: 是否有办法根据起始顶点值过滤路径中的顶点属性?比如,忽略所有年龄大于起始顶点 "年龄 "的客户。

python-3.x gremlin tinkerpop3
1个回答
4
投票

你可以通过使用步骤来过滤你的起始顶点。as 而后 neq 谓词。

像这样。

g.V().hasLabel('Customer').as('V').
  project('name', 'mean').by('name').by(out().
    in().where(neq('V')).dedup().values('money').
    mean())

例如: https:/gremlify.comas。

对于属性的过滤,你可以做类似这样的事情。where(gt('V')).by('age').

g.V().hasLabel('Customer').as('V').
  project('name', 'mean').by('name').
    by(coalesce(
        out().in().where(neq('V')).where(gt('V')).
          by('age').
        dedup().values('money').mean(),
        constant('no values')
      ))
© www.soinside.com 2019 - 2024. All rights reserved.