Gremlin - 只添加顶点(如果它不存在)

问题描述:

我有一组用户名(如['abc','def','ghi'])被添加到图的'用户'标签下。Gremlin - 只添加顶点(如果它不存在)

现在我首先要检查用户名是否已经存在(g.V().hasLabel('user').has('username','def')),然后只添加那些username属性在'user'标签下不匹配的用户。

此外,这可以在一个gremlin查询或groovy脚本?

我正在使用titan图形数据库,tinkerpop3和gremlin REST服务器。

使用“脚本”,您始终可以将多行/命令脚本传递到服务器进行处理,以获得您想要的结果。这个问题,然后用变量正常的编程技术,回答的if/then语句等:

t = g.V().has('person','name','bill') 
t.hasNext() ? t.next() : g.addV('person').property('name','bill').next() 

或者是:

g.V().has('person','name','bill').tryNext().orElseGet{ 
    g.addV('person').property('name','bill').next()} 

但这些是Groovy脚本,并最终TinkerPop有关建议避免在脚本和关闭赞成纯粹的遍历。在单个遍历中处理“获取或创建”的一般方法是做类似这样的事情:

gremlin> g.V().has('person','name','bill').fold(). 
......1> coalesce(unfold(), 
......2>   addV('person').property('name','bill')) 
==>v[18] 
+0

我正在从我的nodejs服务器对gremlin进行REST调用。因此,如果我必须添加200个用户,那么我应该将上述命令调用200次?如果我很少遇到异常或错误,如何处理它,然后我应该回滚?请让我知道这种情况的正确方法。 –

+0

如果您致力于REST并使用脚本,那么只需将我的最后一条语句转换为处理一批200个用户的脚本即可。 'users.each {gV()。has(.....}'其中用户是一个包含200个用户列表的参数。使用REST和批处理方法,整个批处理成功或者全部失败。想要别的东西,然后修改脚本以在循环中包含一个try/catch,以不同的方式进行。使用脚本,您基本上拥有所有常用功能来执行您所需的任何操作。 –