Gremlin 小精灵查询:如何添加包含聚合信息的多个边?

Gremlin 小精灵查询:如何添加包含聚合信息的多个边?,gremlin,Gremlin,我的图表包含一些“个人”节点,这些节点“参与”了一些“对话”节点。我想编写一个Gremlin查询,它将直接在“Person”节点之间创建“TalksWith”边。该边缘应该包含一个属性“countConversations”,显示这两个人参与了多少次对话 这是否可能同时对所有“Person”节点使用一个Gremlin查询 以下是我的图形设置(使用Gremlin控制台): 我想做的是创建这样的“TalkedWith”边 addE("TalkedWith").from("p1").to("p2").

我的图表包含一些“个人”节点,这些节点“参与”了一些“对话”节点。我想编写一个Gremlin查询,它将直接在“Person”节点之间创建“TalksWith”边。该边缘应该包含一个属性“countConversations”,显示这两个人参与了多少次对话

这是否可能同时对所有“Person”节点使用一个Gremlin查询

以下是我的图形设置(使用Gremlin控制台):

我想做的是创建这样的“TalkedWith”边

addE("TalkedWith").from("p1").to("p2").property("countConversations",2)
我写了一个查询来计算一个特定的人与其他人进行了多少次对话

g.V(0L).out("ContributedTo").in("ContributedTo")
.hasId(without(0L)).groupCount().order(local).by(values,desc).next()

现在,我想为每个人运行此计算并创建“TalksWith”边。

这里有一种方法:

gremlin> g.V(0L).hasLabel('Person').
......1>   store('p').
......2>   out('ContributedTo').
......3>   in('ContributedTo').
......4>   where(without('p')).
......5>   groupCount().
......6>   unfold().
......7>   addE('TalkedWith').from(select('p').unfold()).to(select(keys)).
......8>     property('countConversations',select(values))
==>e[18][0-TalkedWith->1]
==>e[19][0-TalkedWith->2]
==>e[20][0-TalkedWith->3]
==>e[21][0-TalkedWith->4]
gremlin> g.E().hasLabel('TalkedWith').valueMap()
==>[countConversations:2]
==>[countConversations:3]
==>[countConversations:1]
==>[countConversations:1]
考虑到您在问题中提供的内容以及编写此遍历的进度,我假设您将跟踪第5行的
groupCount()
中的所有内容。在这一点上,我们有一个
地图
记录了与之交谈的人
v[0]
以及他们交谈的次数。下一行将
映射到其组件条目中,并使用
addE()
为每个条目创建一条边。
from
顶点从原始存储在
列表中的“p”中收集,而
to
则从计数映射中的当前键中提取。然后,“countConversations”属性从计数映射的当前值获取其值

gremlin> g.V(0L).hasLabel('Person').
......1>   store('p').
......2>   out('ContributedTo').
......3>   in('ContributedTo').
......4>   where(without('p')).
......5>   groupCount().
......6>   unfold().
......7>   addE('TalkedWith').from(select('p').unfold()).to(select(keys)).
......8>     property('countConversations',select(values))
==>e[18][0-TalkedWith->1]
==>e[19][0-TalkedWith->2]
==>e[20][0-TalkedWith->3]
==>e[21][0-TalkedWith->4]
gremlin> g.E().hasLabel('TalkedWith').valueMap()
==>[countConversations:2]
==>[countConversations:3]
==>[countConversations:1]
==>[countConversations:1]