CosmosDB图:"upsert"查询模式

Rom*_* Eh 7 gremlin azure-cosmosdb

我是Gremlin查询语言的新手.我必须在Cosmos DB图表上插入数据(使用Gremlin.Net包),无论顶点(或边缘)是否已存在于图形中.如果数据存在,我只需要更新属性.我想用这种模式:

g.V().hasLabel('event').has('id','1').tryNext().orElseGet {g.addV('event').has('id','1')}
Run Code Online (Sandbox Code Playgroud)

但Gremlin.Net/Cosmos DB图API不支持它.有没有办法在单个查询中进行一种upsert查询?

提前致谢.

ste*_*tte 18

有很多方法可以做到这一点,但我认为TinkerPop社区一般都采用这种方法:

g.V().has('event','id','1').
  fold().
  coalesce(unfold(),
           addV('event').property('id','1'))
Run Code Online (Sandbox Code Playgroud)

基本上,它查找"事件" has()并使用fold()步骤强制列表.该列表将为空或包含Vertex在其中.然后coalesce(),它会尝试unfold()列表,如果它有一个Vertex立即返回,否则它会执行addV().

如果您需要知道返回的顶点是否为"new",那么您可以执行以下操作:

g.V().has('event','id','1').
  fold().
  coalesce(unfold(),
           addV('event').property('id','1')).
  property('description','This is an event')
Run Code Online (Sandbox Code Playgroud)