[英]how to insert a vertex in between 2 vertices with edge. Azure Cosmos DB [GREMLIN API]
so from the diagram i would like to save previous versions of formula vertex
that is modified by user vertex
.所以从图中我想保存由
user vertex
修改的formula vertex
先前版本。
So here are the things that i want to do if a formula is modified如果公式被修改,这里是我想要做的事情
formula vertex
and add a previos_value
edge from the latest formula vertex
to the previous formula vertex
formula vertex
的上一个值,并将最新formula vertex
的previos_value
边添加到上一个formula vertex
modified
edge from the user vertex
to the previous formula vertex
user vertex
到前一个formula vertex
的modified
边formula vertex
to the latest formula vertex
formula vertex
所有出边和入边转移到最新的formula vertex
This would be a simple helper method to do the job:这将是一个简单的辅助方法来完成这项工作:
modify = { user, product, version ->
g.V().has("software","name",product).as("s"). /* this would be your formula vertex */
valueMap().
by(unfold()).as("sm").
addV("software").as("ns"). /* create a new vertex */
sideEffect(select("sm").unfold().as("kv"). /* copy properties from the old vertex */
select("ns").
property(select("kv").by(keys),
select("kv").by(values))).
property("version",version). /* set version on the new vertex */
select("s").
sideEffect( /* transfer out-edges */
outE().as("e").
sideEffect(
select("ns").
addE(select("e").by(label)).
to(select("e").inV()).as("ne").
select("e").properties().as("p").
select("ne").
property(select("p").key(),
select("p").value())).
drop()).
sideEffect( /* transfer in-edges */
inE().as("e").
not(outV().where(eq("s"))). /* exclude self-referencing edges */
sideEffect(
select("ns").
addE(select("e").by(label)).
from(select("e").outV()).as("ne").
select("e").properties().as("p").
select("ne").
property(select("p").key(),
select("p").value())).
drop()).
select("ns").
addE("previous_value").to("s").inV(). /* add edges to previous version and user */
addE("modified").
from(V().has("person","name",user)).
iterate()
}
In practice it would look like this:在实践中,它看起来像这样:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin>
gremlin> modify = { user, product, version ->
...
.....39> }
==>groovysh_evaluate$_run_closure1@7523d5a1
gremlin>
gremlin> modify("marko","lop","v2")
gremlin>
gremlin> g.V().has("name","lop").
......1> inE().outV().
......2> path().
......3> by(values("name","version").fold()).
......4> by(label).
......5> by(elementMap())
==>[[lop],previous_value,[id:13,label:software,name:lop,lang:java,version:v2]]
==>[[lop],modified,[id:1,label:person,name:marko,age:29]]
==>[[lop,v2],created,[id:1,label:person,name:marko,age:29]]
==>[[lop,v2],created,[id:4,label:person,name:josh,age:32]]
==>[[lop,v2],created,[id:6,label:person,name:peter,age:35]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.