6

非常基本的问题,
我刚刚将我的 Titan 从 0.54 升级到Titan 1.0 Hadoop 1 / TP3 version 3.01

我遇到了删除值的问题

Property key: Cardinality.LIST/SET

可能是因为升级过程或者只是我对TP3的误解。

 // ----- CODE ------:

tg = TitanFactory.open(c);

TitanManagement mg = tg.openManagement();

//create KEY (Cardinality.LIST) and commit changes
tm.makePropertyKey("myList").dataType(String.class).cardinality( Cardinality.LIST).make();
mg.commit();

//add vertex with multi properties

Vertex v = tg.addVertex();

v.property("myList", "role1");
v.property("myList", "role2");
v.property("myList", "role3");
v.property("myList", "role4");
v.property("myList", "role4");

现在,我想删除所有值“role1,role2 ....”

// iterate over all values and try to remove the values 
 List<String> values = IteratorUtils.toList(v.values("myList"));
        for (String val : values) {
            v.property("myList", val).remove();
         }
  tg.tx().commit();

//---------------- 预期结果 ----------: 空顶点属性

但不幸的是结果不是空的:

System.out.println("Values After Delete" + IteratorUtils.toList(v.values("myList")));

// - - - - - - - - - - 输出 - - - - - - - :

删除后,值仍然很明显!

15:19:59,780  INFO ThriftKeyspaceImpl:745 - Detected partitioner org.apache.cassandra.dht.Murmur3Partitioner for keyspace titan

15:19:59,784  INFO Values After Delete [role1, role2, role3, role4, role4]

有任何想法吗?

4

2 回答 2

10

您没有使用更高级别的 Gremlin API 执行图形遍历,但您当前正在使用较低级别的图形 API 更改图形。在 Gremlin 中执行for循环通常是一种反模式。

根据 TinkerPop 3.0.1 Drop Step 文档,您应该能够从 Gremlin 控制台执行以下操作:

v = g.addV().next()
g.V(v).property("myList", "role1")
g.V(v).property("myList", "role2")
// ...
g.V(v).properties('myList').drop()
于 2016-04-11T14:08:32.197 回答
1

property(key, value)将在顶点(javadoc)上设置属性的值。您应该做的是获取VertexProperties ( javadoc )。

for (VertexProperty vp : v.properties("name")) {
    vp.remove();
}

@jbmusso 提供了一个可靠的解决方案GraphTraversal

于 2016-04-11T14:55:51.480 回答