如何在gremlin中增加或减少顶点属性的值

时间:2016-10-20 12:27:43

标签: titan gremlin tinkerpop3

例如,这是我的顶点:

[label:songs,id:4336,name:testsong123,likeCount:0]

我必须做什么:

我想增加" likeCount"当用户喜欢这首歌时  减少" likeCount"每当用户不同于歌曲时。

我现在在做什么:

默认情况下,我正在做的是通过id获取顶点并添加" + 1" to" likeCount",然后更新到database.similar进行减量,将-1添加到" likeCount"并更新到数据库。

替代: 有没有办法在没有来电的情况下增加或减少。

2 个答案:

答案 0 :(得分:3)

如果你没有对顶点的引用,那么你别无选择,只能查找它(即得到它)。查找不应该是一个大问题,因为您打算通过id查找,这不应该是非常昂贵的。

答案 1 :(得分:0)

这是我用Java编写的DSL,我想您可以做类似的事情。

valueTraversal可以替换为constant(1)或traversal.count()。

public default GraphTraversal<S, ?> incrementProperty(final String propertyKey,
        final GraphTraversal<?,?> valueTraversal) {
    return property(Cardinality.single, propertyKey,
            __.union(
                __.values(propertyKey),
                valueTraversal)
            .sum());
}

public default GraphTraversal<S, ?> decrementProperty(final String propertyKey,
        final GraphTraversal<?,?> valueTraversal) {
    return property(Cardinality.single, propertyKey,
            __.union(
                __.values(propertyKey),
                valueTraversal).math("_ * -1")
            .sum());
}