问题描述
我在Azure CosmosDB中运行此Gremlin查询时遇到问题。
g.V().
has('node','id','new').
fold().coalesce(
unfold(),addV('node').
property('id','new').
property('partitionKey','edd1f6ca3b1c446987d7da29e370cc7e')
).V().
has('node','new').
as('new').
V().
has('node','root').
coalesce(
outE('contains').where(inV().as('new')),addE('contains').to('new')
).V().
has('node','new').
as('new').
V().has('userGroup','userGroup1').
coalesce(
outE('hasAccess').where(inV().as('new')),addE('hasAccess').to('new')
)
我遇到两个问题:
查询的基础是(来自gremlify.com的图像):
g.addV('node').
property('id','root').
property('partitionKey','33cb2571f8e348eaa875e6a2639af385')
g.addV('userGroup').
property('id','userGroup1').
property('partitionKey','1')
最后我想像这样
可以多次运行而无需更改任何内容(幂等)的查询。如果我在单独的查询中执行此操作,则效果很好:
g.V().
has('node','edd1f6ca3b1c446987d7da29e370cc7e')
)
g.V().
has('node',addE('contains').to('new')
)
g.V().
has('node',addE('hasAccess').to('new')
)
解决方法
根据我在遍历过程中使用V()
步骤的经验,即使在使用诸如has('id',<name>)
之类的强大过滤器后,某些供应商也无法很好地对其进行优化,我认为您应该尽量避免如果要执行单个查询,请使用它。
您可以尝试:
g.V().hasLabel('node','userGroup').has('_id',within('new','root','userGroup1')).
fold().as('vertices').coalesce(
unfold().has('node','_id','new'),addV('node').property('_id','new').
property('partitionKey','edd1f6ca3b1c446987d7da29e370cc7e')
).as('new').
select('vertices').unfold().has('node','root').coalesce(
outE('contains').where(inV().as('new')),addE('contains').to('new')
).
select('vertices').unfold().has('userGroup','userGroup1')
coalesce(
outE('hasAccess').where(inV().as('new')),addE('hasAccess').to('new')
)