Azure cosmosdb 我们可以在gremlin中放置和调节边缘吗

Azure cosmosdb 我们可以在gremlin中放置和调节边缘吗,azure-cosmosdb,gremlin,tinkerpop3,Azure Cosmosdb,Gremlin,Tinkerpop3,我有一个要求,在放置和条件的边缘在小精灵。 我们是否有一个类似于for或condition的机制。 g、 V().haslabel('u')。outE('label1','label2')。inV().has('name','name1')) 我已经检查了where子句,但它进一步限制了遍历。我们是否有更灵活的机制来延续这一链条?同样的条件也能起作用 try:g.E().has('edgeProperty')=>这将给出所有设置了“edgeProperty”的边。最好提供一个生成一些示例数据的G

我有一个要求,在放置和条件的边缘在小精灵。 我们是否有一个类似于for或condition的机制。 g、 V().haslabel('u')。outE('label1','label2')。inV().has('name','name1'))

我已经检查了where子句,但它进一步限制了遍历。我们是否有更灵活的机制来延续这一链条?

同样的条件也能起作用


try:g.E().has('edgeProperty')=>这将给出所有设置了“edgeProperty”的边。

最好提供一个生成一些示例数据的Gremlin脚本,因为它使问题的上下文更加清晰:

g.addV('u').as('u').
  addV('v').property('name','name1').as('v1').
  addV('v').property('name','name2').as('v2').
  addV('v').property('name','name1').as('v3').
  addE('label1').from('u').to('v1').
  addE('label2').from('u').to('v1').
  addE('label1').from('u').to('v2').
  addE('label2').from('u').to('v2').
  addE('label2').from('u').to('v3').iterate()
在本例中,我假设您只想获取上面我标记为“v1”的顶点,因为它是唯一一个具有两条边(一条标记为“label1”,另一条标记为“label2”)且具有属性键“name1”的顶点。我进一步假设,图的模式只允许边的奇异多重性,这样在“u”和“v*”顶点之间就有零条或一条“label1”和“label2”边

我采取了这种方法,尽管可能还有其他方法:

gremlin> g.V().hasLabel('u').
......1>   outE('label1','label2').
......2>   where(otherV().has('name','name1')).
......3>   groupCount().
......4>    by(otherV()).
......5>   unfold().
......6>   where(select(values).is(eq(2))).
......7>   select(keys).
......8>   unfold().
......9>   valueMap(true)
==>[id:1,name:[name1],label:v]

这里的要点是考虑<代码> GROPCONTUTE(),它基本上提供了连接到<代码>另一个()/<代码>的边数。您希望这些值等于2,以使筛选器成功。因此,在

groupCount()
之后,包含键的
otherV()
和值的边计数的结果
Map
将展开为条目,并在第6行进行过滤。一旦我们有了这些,我们就可以从
地图上抓取钥匙,因为我们不再需要计数了

我还尝试了
match()
,我认为CosmosDB不支持它,但实际上在本例中读起来相当不错:

gremlin> g.V().hasLabel('u').
......1>   match(__.as('u').out('label1').as('v'),
......2>         __.as('u').out('label2').as('v'),
......3>         __.as('v').has('name','name1')).
......4>   select('v').
......5>     by(valueMap(true))
==>[id:1,name:[name1],label:v]

您的意思是要查找“u”顶点,其中每种类型至少有一条边:“label1”和“label2”,并且这两条边都以属性“name”=“name1”的相邻顶点结束?否,我希望使用指定的标签进行遍历。从u开始,给我所有的顶点,它们的边在两个标签label1和label2之间。所以在顶点u和名称1之间有两条边,分别有标签1和标签2。好吧,我想我们说的是同一件事。你想说我们必须把边中的“和”链接起来才能工作吗?