在 Azure Cosmos DB Graph API 中添加或获取顶点

2023-12-13

使用 Gremlin,我可以通过发出以下命令在 Azure Cosmos DB 图中创建顶点

g.addV('the-label').property('id', 'the-id')

然后使用找到它

g.V('the-label').has('id', 'the-id')

但是,我还没有找到一种方法来发出查询,如果节点丢失,则插入该节点,如果节点已经存在,则仅获取对其的引用。有办法吗?


我的具体用例是,我想在单个查询中在两个节点之间添加一条边,无论这些节点(或边,就此而言)是否已经存在。我试过这种更新插入方法,但显然 Cosmos DB 不支持 Groovy 闭包,因此它不起作用。


“upsert 模式”目前已得到相对明确的定义和接受。描述的是here。如果您想扩展它以添加边缘,那也是可能的:

g.V().has('event','id','1').
  fold().
  coalesce(unfold(),
           addV('event').property('id','1')).as('start').
  coalesce(outE('link').has('id','3'),
           coalesce(V().has('event','id','2'), 
                    addV('event').property('id','2')).
                    addE('link').from('start').property('id','3'))

如果这看起来有点复杂,你绝对可以用Gremlin DSL(尽管我目前不确定 CosmosDB 支持 Gremlin 字节码)。这是一个example通过 DSL 简化了更复杂的 upsert 逻辑。这个里面有讨论博客文章更详细地说。

UPDATE:从 TinkerPop 3.6.0 开始,fold()/coalesce()/unfold()模式已很大程度上被新步骤取代 of mergeV() and mergeE()这极大地简化了执行类似更新插入操作所需的 Gremlin。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Azure Cosmos DB Graph API 中添加或获取顶点 的相关文章

随机推荐

  • Spring 数据出现 ne04j 错误...检索路径时出错

    我将 spring 数据与 neo4j 一起使用 I used Query注解将查询放置在存储库中 查询如下 Query value START me node 0 friend node 1 MATCH p shortestPath me
  • 空手道 + 黄瓜报告缺少所调用场景响应的文档字符串

    Cucumber 报告缺少来自调用场景的响应的文档字符串 在给定的场景中 我使用 Call 调用多个场景 它的打印有时会随机响应所调用的场景 有时则不会 这阻碍了我们在测试报告中可视化API之间的数据流 尽管空手道日志有来自该调用场景的响应
  • 避免文本区域行/列错误?

    我正在使用几页验证工具我遇到的一个问题是他们告诉我 textarea 必须有 rows 和 cols 属性 如果我在 CSS 中设置它或使用 display none 并使用它来保存原始文本数据 我可以做一些跳过的事情吗 每次我使用它时 似
  • 删除缺失超过 x% 的列/行

    我想删除所有超过 50 的列或行NAs 在数据框中 这是我的解决方案 delete columns with more than 50 missings miss lt c for i in 1 ncol data if length wh
  • 如何创建一个通用例程来计时方法?

    我需要测量应用程序上下文中许多不同方法的执行情况 NET 当然有 Stopwatch 类 它允许人们使用它的 Start 和 Stop 方法轻松地对一段代码进行计时 然而 以正常方式使用 Stopwatch 类需要我用 Stopwatch
  • 如何等待所有线程完成工作?

    我有以下脚本 不参考内容 import thread def func1 arg1 arg2 print Write to CLI def verify result func1 for in range 4 thread start ne
  • C++ 将 mac id 字符串转换为 uint8_t 数组

    我想从命令行读取 mac id 并将其转换为数组uint8 t在结构中使用它的值 我无法让它工作 我有一个 mac id 分割的字符串向量 我想用stringstream转换他们没有运气 我缺少什么 int parseHex const s
  • 使用本质锁进入块

    我不明白以下代码如何产生似乎违反对象锁定义的输出 当然应该只允许一个线程打印 已获取锁 消息 但它们都这样做吗 class InterruptThreadGroup public static void main String args O
  • addToBackStack 参数为 null 是什么意思?

    我有一个客户代码 所有片段只有一个活动 即单个活动正在管理所有片段 此活动在该片段的方法末尾包含任何片段的以下代码 例如 片段MoreFragment MoreFragment firstFragment new MoreFragment
  • 不知道如何获得敌人的生命值

    我有这个代码 但我不知道为什么hit collider gameObject GetComponent health 返回 null void Shoot Vector2 mousePosition new Vector2 Camera m
  • 在 ASP.NET 中将二进制数据转换为图像控件

    我的数据库中有图像的二进制数据 我想将其显示在 ASP NET 中的图像控件中 如何 如果不可能 请另想办法将其保存到数据库中并在图像控件中显示 创建常规 HTMLimg像这样的元素 img And in 代码隐藏做这个 image src
  • 在 AngularJS 中将 json & 转换为 &

    我有一个具有 value 属性的 HTML 元素 该值应该是 Comfort Protection 但来自 JSON 获取结果的名称是 Comfort amp 在我看来 Protection 和 AngularJS 是这样打印的 我尝试将此
  • Jquery Datatable 到响应式数据表

    我是数据表新手 从未创建过响应式数据表 所以我可能需要很多帮助 Here is link用于可编辑的 JQuery 数据表 我想将其创建为响应式 我做的第一件事是删除了它的容器宽度 现在它的大小调整为平板电脑大小的屏幕 看起来不错 fw c
  • 在 sql server 2008 中将逗号分隔的字符串转换为表或数组,而不使用 dbo.split

    如何在sql server 2008中将逗号分隔的字符串转换为表或数组而不使用dbo split函数 因为系统不支持此函数 例如字符串 12 14 15 将此更改为 Table column 12 14 15 Or array 12 14
  • Typescript - 如何添加扩展方法

    我读到你可以在 Typescript 中创建扩展方法 我查找了一些代码 并将该代码放入我的扩展methods ts中 但我收到一条错误 指出 toNumber 不存在 我怎样才能解决这个问题 你可以延长String接口通过扩大全球范围 ex
  • Firebase 刷新令牌

    使用方法 FIRInstanceID tokenWithAuthorizedEntity scope options handler 我不太确定参数需要什么 授权实体和行动是什么 我还要将 APNS 令牌从苹果传递给该方法吗 AUTHORI
  • C++ 中的按键事件

    我目前正在使用GetAsyncKeyState 检测 Keydown 事件 但是当您按住该键时 这些事件将重复 有什么简单的方法可以阻止事件再次发生 Example 如果我按住键i在我的键盘上一段时间 我会得到这样的输出 iiiiiiiii
  • 使用java将日期转换为AEST

    我想使用 Java 将以下日期转换为 AEST 格式 2018 01 08T02 10 24 000 0000w 下面是我用来转换的代码 DateTimeFormatter dtf DateTimeFormatter ofPattern y
  • 添加facet_grid面板手段作为文本和hline

    我有一个看起来像这样的数据框 gt head df DGene JGene cdr3 len Sum 1 IGHD1 IGHJ1 0 22 2 IGHD1 IGHJ1 1 11 3 IGHD1 IGHJ1 2 16 4 IGHD1 IGHJ
  • 在 Azure Cosmos DB Graph API 中添加或获取顶点

    使用 Gremlin 我可以通过发出以下命令在 Azure Cosmos DB 图中创建顶点 g addV the label property id the id 然后使用找到它 g V the label has id the id 但