需要一个 gremlin 查询,通过计数从顶点标签中总结边

need a gremlin query that summarizes edges by in out vertex labels by counts

使用 Cosmos DB Gremlin API,我正在尝试创建一个 gremlin 查询,该查询按顶点标签按计数汇总边

我能想到的最接近的事情不是进行重复数据删除的计数。任何帮助将不胜感激

g.E().project('edge','in','out').
by(label()).
by(inV().label()).
by(outV().label()).dedup()

输出

[
  {
    "edge": "uses",
    "in": "software-system",
    "out": "person"
  },
  {
    "edge": "runs on",
    "in": "container",
    "out": "software-system"
  },
  {
    "edge": "requires",
    "in": "component",
    "out": "container"
  },
  {
    "edge": "embeds",
    "in": "code",
    "out": "component"
  }
]

理想情况下 输出

[
  {
    "edge": "uses",
    "in": "software-system",
    "out": "person",
    "count": 105
  },
  {
    "edge": "runs on",
    "in": "container",
    "out": "software-system",
    "count": 22
  },
  {
    "edge": "requires",
    "in": "component",
    "out": "container",
    "count": 15
  },
  {
    "edge": "embeds",
    "in": "code",
    "out": "component",
    "count": 6
  }
]

我想我会结合使用 groupCount()project():

gremlin> g.E().groupCount().
......1>         by(project('edge','in','out').
......2>              by(label).
......3>              by(inV().label()).
......4>              by(outV().label())).
......5>   unfold()
==>{edge=created, in=software, out=person}=4
==>{edge=knows, in=person, out=person}=2

如果您的图形数据库不支持键作为映射,那么您可能需要进一步转换它:

gremlin> g.E().groupCount().
......1>         by(project('edge','in','out').
......2>              by(label).
......3>              by(inV().label()).
......4>              by(outV().label())).
......5>   unfold().
......6>   map(union(select(keys), select(values)).fold())
==>[[edge:created,in:software,out:person],4]
==>[[edge:knows,in:person,out:person],2]