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

Azure cosmosdb 在Azure Cosmos DB Graph API中添加或获取顶点,azure-cosmosdb,gremlin,Azure Cosmosdb,Gremlin,使用Gremlin,我可以通过发出 g.addV('the-label').property('id', 'the-id') 然后发现它使用 g.V('the-label').has('id', 'the-id') 但是,我还没有找到一种方法来发出一个查询,如果节点丢失,则该查询将插入节点,如果节点已经存在,则只获取对它的引用。有办法吗 我的具体用例是,我想在两个节点之间添加一条边,而不管这些节点或边在单个查询中是否已经存在。我试过了,但显然Cosmos DB不支持Groovy闭包,所以它不

使用Gremlin,我可以通过发出

g.addV('the-label').property('id', 'the-id')
然后发现它使用

g.V('the-label').has('id', 'the-id')
但是,我还没有找到一种方法来发出一个查询,如果节点丢失,则该查询将插入节点,如果节点已经存在,则只获取对它的引用。有办法吗

我的具体用例是,我想在两个节点之间添加一条边,而不管这些节点或边在单个查询中是否已经存在。我试过了,但显然Cosmos DB不支持Groovy闭包,所以它不起作用。

请看这个

你可以试试

g、 Inject0.coalesce__u;.V.has'id',the id',addV'the-label'。属性'id',the id'

顺便说一句,您将无法使用g.V“the-label”找到顶点。它有'id','the-id'

g、 V接受顶点id作为参数,而不是顶点标签

请看这个

你可以试试

g、 Inject0.coalesce__u;.V.has'id',the id',addV'the-label'。属性'id',the id'

顺便说一句,您将无法使用g.V“the-label”找到顶点。它有'id','the-id'


g、 V接受顶点id作为参数,而不是顶点标签

此时,upsert模式的定义和接受程度相对较好。对其进行了描述。如果您想扩展该功能以同时添加边,也可以:

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'))

如果这看起来有点复杂,你可以用一个简单的方法来简化,尽管我不确定CosmosDB在这一点上是否支持Gremlin字节码。这是一个通过DSL简化的更复杂的upsert逻辑。本文将对此进行更详细的讨论。

此时,upsert模式的定义和接受程度相对较好。对其进行了描述。如果您想扩展该功能以同时添加边,也可以:

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'))

如果这看起来有点复杂,你可以用一个简单的方法来简化,尽管我不确定CosmosDB在这一点上是否支持Gremlin字节码。这是一个通过DSL简化的更复杂的upsert逻辑。这将在本文中进行更详细的讨论。

Current Cosmos不支持字节码,因此没有DSL,但我被告知他们正在开发它Current Cosmos不支持字节码,因此没有DSL,但我被告知他们正在开发它