Azure cosmosdb 我们可以在gremlin中放置和调节边缘吗
我有一个要求,在放置和条件的边缘在小精灵。 我们是否有一个类似于for或condition的机制。 g、 V().haslabel('u')。outE('label1','label2')。inV().has('name','name1')) 我已经检查了where子句,但它进一步限制了遍历。我们是否有更灵活的机制来延续这一链条?同样的条件也能起作用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
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。好吧,我想我们说的是同一件事。你想说我们必须把边中的“和”链接起来才能工作吗?