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