我们在 Azure Cosmos DB 上遇到 Gremlin 查询问题 该查询在 TinkerPop 上的 Gremlin 控制台中有效,但 Cosmos DB 对此有所抱怨。
好像是最后group().by(...)
一步的问题
不确定这是一个错误还是有一些针对 Cosmos 的解决方法
错误如下:
错误
ExceptionType : InvalidCastException ExceptionMessage : Unable to cast object of type 'Microsoft.Azure.Cosmos.Gremlin.Core.Runtime.StringField' to type 'Microsoft.Azure.Cosmos.Gremlin.Core.Runtime.Compose1Field'. Source : Microsoft.Azure.Cosmos.Gremlin.Core HResult : 0x80004002
查询如下:
g.V().hasLabel('user').as('u').
out('userGeneratedEvent').
outE('eventRelatedTo').as('w').inV().
out('itemVersionOf').as('i').
select('u','i','w').
by('userId').
by('itemId').
by('weight').
unfold().
group().
by(keys).
by(select(values).fold()).
unfold()
它应该产生以下结果:
==>u=[1, 2, 2, 2, 2, 3, 3]
==>w=[5, 4, 1, 2, 3, 4, 1]
==>i=[1, 1, 2, 1, 3, 1, 2]
图形示例如下:
g.addV('user').property('userId', 1)
g.addV('user').property('userId', 2)
g.addV('user').property('userId', 3)
g.addV('event').property('eventId', 1)
g.addV('event').property('eventId', 2)
g.addV('event').property('eventId', 3)
g.addV('event').property('eventId', 4)
g.addV('event').property('eventId', 5)
g.addV('itemVersion').property('itemVersionId', 1)
g.addV('itemVersion').property('itemVersionId', 2)
g.addV('itemVersion').property('itemVersionId', 3)
g.addV('itemVersion').property('itemVersionId', 4)
g.addV('itemVersion').property('itemVersionId', 5)
g.addV('itemVersion').property('itemVersionId', 6)
g.addV('itemVersion').property('itemVersionId', 7)
g.addV('item').property('itemId', 1)
g.addV('item').property('itemId', 2)
g.addV('item').property('itemId', 3)
g.addV('item').property('itemId', 4)
g.V().hasLabel('user').has('userId',1).addE('userGeneratedEvent').to(g.V().hasLabel('event').has('eventId',1))
g.V().hasLabel('user').has('userId',2).addE('userGeneratedEvent').to(g.V().hasLabel('event').has('eventId',2))
g.V().hasLabel('user').has('userId',2).addE('userGeneratedEvent').to(g.V().hasLabel('event').has('eventId',3))
g.V().hasLabel('user').has('userId',3).addE('userGeneratedEvent').to(g.V().hasLabel('event').has('eventId',4))
g.V().hasLabel('user').has('userId',3).addE('userGeneratedEvent').to(g.V().hasLabel('event').has('eventId',5))
g.V().hasLabel('event').has('eventId',1).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',1)).property('weight', 5)
g.V().hasLabel('event').has('eventId',2).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',1)).property('weight', 4)
g.V().hasLabel('event').has('eventId',2).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',2)).property('weight', 1)
g.V().hasLabel('event').has('eventId',3).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',1)).property('weight', 2)
g.V().hasLabel('event').has('eventId',3).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',3)).property('weight', 3)
g.V().hasLabel('event').has('eventId',4).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',4)).property('weight', 4)
g.V().hasLabel('event').has('eventId',5).addE('eventRelatedTo').to(g.V().hasLabel('itemVersion').has('itemVersionId',5)).property('weight', 1)
g.V().hasLabel('itemVersion').has('itemVersionId',1).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',1))
g.V().hasLabel('itemVersion').has('itemVersionId',2).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',2))
g.V().hasLabel('itemVersion').has('itemVersionId',3).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',3))
g.V().hasLabel('itemVersion').has('itemVersionId',4).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',1))
g.V().hasLabel('itemVersion').has('itemVersionId',5).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',2))
g.V().hasLabel('itemVersion').has('itemVersionId',6).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',3))
g.V().hasLabel('itemVersion').has('itemVersionId',7).addE('itemVersionOf').to(g.V().hasLabel('item').has('itemId',4))