目标
我有一个简单的任务要完成:设置特定边缘属性的权重。以此场景为例:
我想要做的是更新weight
的值。
附加要求
- 如果边不存在,则应创建它。
- 两个节点之间可能只存在最多一种相同类型的边缘(即,Joey和Pizza之间不能存在多个
type
为“eat”的“votes_for”边缘)。 - 必须使用Titan的Java API解决此问题(其中包括作为TinkerPop 3的一部分的Gremlin)。
我所知道的
我有以下信息:
- 标记为“user”的Vertex
- 边缘标签
votes_for
- 边缘属性
type
的值(在本例中为“eat”) - 标记为“meal”的顶点的
name
属性的值(在本例中为“pizza”),因此也包括它的Vertex。
我的想法
我想我需要做类似以下的事情:
- 从Joey顶点开始
- 找到所有标记为
votes_for
,具有type
为“eat”和一个标记为“meal”的出边,该出边缘具有name
为“pizza”的值。 - 更新边缘的
weight
值。
这是我在代码中所尝试的:
//vertex is Joey in this case
g.V(vertex.id())
.outE("votes_for")
.has("type", "eat")
//... how do I filter by .outV so that I can check for "pizza"?
.property(Cardinality.single, "weight", 0.99);
//... what do I do when the edge doesn't exist?
正如在代码中所评论的,仍然存在问题。明确指定Titan模式是否有帮助?我不知道是否有任何辅助/实用方法?是否更合理拥有多个vote_for
标签而非一个标签+type
属性,例如vote_for_eat
?
感谢您的任何帮助!