以下查询将每个给定的输入顶点与其相邻顶点和它们之间的货币对分组,然后在每组分组边上使用两个聚合函数 sum 和 count。
gremlin> g.V([2367552, 2367728]).as("v0")
.bothE().as("e")
.otherV().as("v1")
.select("e").values("currency").as("c")
.select("v0","e","v1","c")
.group()
.by(select("v0","v1","c"))
.by(fold().match(__.as("x").count(local).as("count"),
__.as("x").unfold().select("e").by("trxn_amt").sum().as("sum")).select("count","sum"))
==>{{v0=v[2367552], v1=v[2343088], c=USD}={count=1, sum=12082.0595703125}, {v0=v[2367728], v1=v[2338888], c=USD}={count=10, sum=358.8999938964844}}
虽然查询有效,但当我翻译成gremlinpython时,它给了我错误"TypeError: Object of type GraphTraversal is not JSON serializable"。(我无法解决这个问题,所以我认为最好修改导致问题的查询)。
在高层次上,我怀疑如果我改变输出格式,那么问题就可以解决。
主要问题是,有没有办法“扁平化”分组输出?
由此:
==>{{v0=v[2367552], v1=v[2343088], c=USD}={count=1, sum=12082.05}, ...}
进入这个:
==>{{v0=v[2367552], v1=v[2343088], c=USD, count=1, sum=12082.05}, ...}
或这个:
==>{{v[2367552], v[2343088], USD, 1, 12082.05}, ...}
编辑
原来这可能与输出格式无关。这似乎是group
破坏它并导致“JSON 可序列化”错误的命令。奇怪的查询,但是有没有不使用 group 命令进行分组的方法?