Я использую JanusGraph 0.2 с Cassandra 3.9. Как я могу заменить вершину?
Мы можем обновить вершину, например:
gV(vertex_id).property("name","Marko")
есть ли способ заменить вершину?
1 ответ
Таким образом, вы хотите заменить все свойства одной вершины свойствами другой вершины (по крайней мере, так я понимаю ваш вопрос вместе с вашим комментарием).
Чтобы удалить все свойства, вы просто должны удалить их:
g.V(vertex_id).properties().drop().iterate()
и мы можем увидеть, как скопировать все свойства из одной вершины в другую в этом ответе Дэниела Куппица на вопрос о том, как объединить две вершины:
g.V(vertex_with_new_properties).
sideEffect(properties().group("p").by(key).by(value())).
cap("p").unfold().as("kv").
V(vertex_id).
property(select("kv").select(keys), select("kv").select(values)).
iterate()
Когда мы объединяем эти два обхода, мы получаем обход, который отбрасывает старые свойства и копирует новые свойства из другой вершины:
g.V(vertex_id).
sideEffect(properties().drop()).
V(vertex_with_new_properties).
sideEffect(properties().group("p").by(key).by(value())).
cap("p").unfold().as("kv").
V(vertex_id).
property(select("kv").select(keys), select("kv").select(values)).
iterate()
В действии для современного графа:
// properties before for both vertices:
gremlin> g.V(1).valueMap(true)
==>{id=1, label=person, name=[marko], age=[29]}
gremlin> g.V(2).valueMap(true)
==>{id=2, label=person, name=[vadas], age=[27]}
// Replace all properties of v[1]:
gremlin> g.V(1).
sideEffect(properties().drop()).
V(2).
sideEffect(properties().group("p").by(key).by(value())).
cap("p").unfold().as("kv").
V(1).
property(select("kv").select(keys), select("kv").select(values)).
iterate()
// v[1] properties after:
gremlin> g.V(1).valueMap(true)
==>{id=1, label=person, name=[vadas], age=[27]}
Вы можете увидеть этот пример здесь, в GremlinBin: http://www.gremlinbin.com/bin/view/5a5ca9c7891c0