График обновления TinkerPop3 во время обхода

Я использую обход TinkerPop3 в Java, и я хочу обновить выходные вершины, отредактировать их, а затем, чтобы эта отредактированная вершина не отображалась снова, пока продолжается обход. Это возможно?

Этот код:

TinkerGraph tg = TinkerGraph.open();

/**add some vertices and edges**/

GraphTraversalSource gt = tg.traversal();
GraphTraversal<Vertex, Map<String,Object>> traversal = gt.V()
    .has("processed",false).as("initial")
    .out()
    .aggregate("vertices")
    .select("initial","vertices");

while(traversal.hasNext()){
    initial.property("processed",true);
}

Будет многократно выплевывать первую найденную вершину снова и снова, даже если я установил для свойства "processing" значение true.

Что я могу сделать, чтобы исправить это или обойти это?


person Brenden    schedule 17.12.2015    source источник


Ответы (1)


Я не уверен, что происходит в вашем примере кода, но если вы хотите установить свойства в рамках обхода, вы можете сделать это в одной строке кода. Смотрите мою консольную сессию:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> graph.addVertex('processed',false)
==>v[0]
gremlin> graph.addVertex('processed',false)
==>v[2]
gremlin> graph.addVertex('processed',false)
==>v[4]
gremlin> graph.addVertex('processed',true)
==>v[6]
gremlin> g.V().has('processed',false)
==>v[0]
==>v[2]
==>v[4]
gremlin> g.V().has('processed',false).property('processed',true)
==>v[0]
==>v[2]
==>v[4]
gremlin> g.V().has('processed',false)
gremlin>

Вы можете видеть, что все "обработанные" свойства теперь установлены на false.

person stephen mallette    schedule 18.12.2015
comment
Угу, конечно. Также оказывается, что при повторной инициализации обхода будут учтены все изменения, которые вы внесли в вершины в java. - person Brenden; 18.12.2015