当前位置: 首页 > 知识库问答 >
问题:

Gremlin-仅在不存在时添加顶点

满自明
2023-03-14

我有一个用户名数组(例如,['abc','def','ghi])要添加到图中的“user”标签下。

现在我首先要检查用户名是否已经存在(g.V().hasLabel('user')。包含('username','def')),然后仅在“user”标签下添加username属性不匹配的内容。

此外,这可以在单个gremlin查询或groovy脚本中完成吗?

我正在使用titan graph数据库、tinkerpop3和gremlin REST服务器。

共有2个答案

祁增
2023-03-14

您可以直接使用:

g.V().has('user','username','def').fold().coalesce(unfold(),addV('user').property('username','def'))
嵇俊德
2023-03-14

使用“脚本”,您可以始终将多行/命令脚本传递给服务器进行处理,以完成您想要的任务。然后使用变量、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()}

但这些都是时髦的脚本,最终TinkerPop建议避免脚本和闭包,而选择纯遍历。在单个遍历中处理“获取或创建”的一般方法是这样做:

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

有关upsert/get或create模式的更多信息,请参阅这个堆栈溢出问题。

 类似资料:
  • 我正在azure中使用cosmos图形数据库。 有人知道是否有一种方法可以在两个顶点之间添加一条边,只有当它不存在时(使用gremlin图查询)? 我可以在添加顶点时这样做,但不能使用边。我从这里获取了执行此操作的代码: 谢谢

  • 问题内容: 我只想在文件末尾添加换行符,以防止在文件末尾出现多个换行符。 我希望使用sed。这是我当前代码遇到的问题: 当我在文件上运行代码时; 如果没有,它将添加换行符,如果存在则将其删除…这使我感到困惑。 问题答案: 由于它会删除换行符(如果不存在),因此您可以简单地使用: 添加换行符并删除所有内容,然后添加换行符。不是优雅的方式,但肯定可以工作:)

  • 我在我的应用程序中使用gremlin REST服务器,我想在单个查询中为一个顶点创建多个边。我有从哪里创建边缘到单个顶点的顶点ID列表。 对于eg-g.V(12,13,14,15)。添加(“使用”,g.V(100)) 我已经尝试了许多遍历步骤,但无法使其工作。

  • 问题内容: 假设您有一个文件 并希望添加一些标头信息,例如 如何添加此“标题”?手动执行似乎很简单。点击几回车,复制/粘贴或写信息,就可以了。当然,在R中,我可以读入,创建,添加标题信息,然后。 我想知道是否还有另一种从“顶部”附加文件的方法。也欢迎使用其他解决方案(来自c ++或Java …)(我很好奇其他语言如何解决此问题)。 问题答案: 在R中,不需要使用额外的文件。您可以这样做: 但是,使

  • 我正在创建一个Titan图(由Dynamodb支持);我正在使用Titan 1.0.0并运行Gremlin Server 3(在TinkerPop3上)。 我试图在一条直线上用一个标签和多个属性向图中添加一个顶点。我可以用一个标签和一个属性添加一个顶点,在创建一个顶点后,我可以向其添加多个属性,但似乎我不能一次完成所有操作。 为了测试,我在gremlin shell中运行命令,但最终用例是通过RE

  • 这是我的超文本标记语言PHP表页面的完整代码...