1

我有这段代码,它本质上更新属性,删除所有旧IsOfType边并添加新IsOfType边(如果我删除所有方法/类抽象并使其内联):

traversal = g.V("Entity:633471488:519").as("entity");

//update properties
traversal.property("text", "new text");
traversal.property("description", "new description");

//drop typeEdges
traversal.select("entity").outE("IsOfType").drop();
//even that causes the same issue(!): traversal.select("entity").outE("HasInner").drop();
System.out.println("traversal after type edges deletion: " +traversal);

//make new typeEdges
traversal.V("Entity:996942848:518").as("type-0").addE("IsOfType").from("entity").to("type-0");

System.out.println("traversal after type edges addition: " +traversal);

//storage  
traversal.select("entity").forEachRemaining({})

IsOfType一切正常(即使是现有边缘的下降)。但是新IsOfType边的创建似乎并没有在图上产生新的边。如果我注释掉 drop,那么创建工作正常(!)就好像在最后发生DropStep的事情之前addEdgeStep。我什至试图放弃其他类型的边缘,它导致了同样的问题(!)。可能是隐式事务处理决定在 adrop()发生时提交next()iterate()并且forEachRemaining()?? 如果是这种情况,那么使用 Fluent API 就不会在同一事务中发生丢弃和创建,这使得它对实际应用程序不是很有用:(

这是删除后和在我的运行中添加两条边后的遍历状态IsOfType(我尝试了 Java 和 Datastax Studio 控制台):

traversal after type edges deletion: 
[
   GraphStep(vertex,[Entity:633471488:519])@[entity], 
   AddPropertyStep({value=[Entity], key=[atClass]}), 
   AddPropertyStep({value=[FilmWithSuperCategories aaa], key=[text]}), 
   AddPropertyStep({value=[dffsdfsd f2313], key=[description]}),   
   SelectOneStep(entity)@[entity], 
   VertexStep(OUT,[IsOfType],edge), 
   DropStep
]

traversal after type edges addition: 
[
   GraphStep(vertex,[Entity:633471488:519])@[entity], 
   AddPropertyStep({value=[Entity], key=[atClass]}), 
   AddPropertyStep({value=[FilmWithSuperCategories aaa], key=[text]}), 
   AddPropertyStep({value=[dffsdfsd f2313], key=[description]}), 
   SelectOneStep(entity)@[entity], 
   VertexStep(OUT,[IsOfType],edge), 
   DropStep, 
   GraphStep(vertex,[Entity:996942848:518])@[type-0], 
   AddEdgeStep({~from=[[SelectOneStep(entity)]], ~to=[[SelectOneStep(type-0)]], label=[IsOfType]}), 
   GraphStep(vertex,[Entity:1489781376:516])@[type-1], 
   AddEdgeStep({~from=[[SelectOneStep(entity)]], ~to=[[SelectOneStep(type-1)]], label=[IsOfType]})
]

编辑

从我在这里读到的(http://tinkerpop.apache.org/docs/current/reference/#drop-step

drop() 步骤(filter/sideEffect)用于从图中删除元素和属性(即删除)。这是一个过滤步骤,因为遍历不会产生传出对象。

没有返回任何对象,因此在发生掉落后无法执行任何操作!所以我很好奇如何使用 DSE Graph Fluent API 在单个事务中进行多次删除/添加

谢谢!

4

1 回答 1

3

您可以将您包装drop在一个sideEffect步骤中,例如:

g.V(entity1).as("a").sideEffect(outE().filter(inV().is(entity2)).drop()).
  V(entity2).addE("link").from("a")
于 2016-12-26T11:51:39.280 回答