如何使用GremlinAPI在CosmosDB中进行简单计算

如何使用GremlinAPI在CosmosDB中进行简单计算,gremlin,azure-cosmosdb-gremlinapi,Gremlin,Azure Cosmosdb Gremlinapi,我将CosmosDB与GremlinAPI一起使用,我希望执行简单的计算,即使CosmosDB不支持数学步骤 假设我有一个具有财产年龄的顶点“Person”,它可以有一个边“拥有”到另一个也具有财产年龄的顶点“Pet”。 我想知道一个人是否有一只比他年轻但不超过10岁的猫 查询(我知道这只是其中的一部分,但这就是我的问题所在) 返回一个空结果,但 g.V().hasLabel("Person").has("Name", "Jonathan Q. Arbuckle").as("owner").va

我将CosmosDB与GremlinAPI一起使用,我希望执行简单的计算,即使CosmosDB不支持数学步骤

假设我有一个具有财产年龄的顶点“Person”,它可以有一个边“拥有”到另一个也具有财产年龄的顶点“Pet”。 我想知道一个人是否有一只比他年轻但不超过10岁的猫

查询(我知道这只是其中的一部分,但这就是我的问题所在)

返回一个空结果,但

g.V().hasLabel("Person").has("Name", "Jonathan Q. Arbuckle").as("owner").values("age").inject(-10).as("minAge").select("owner")
返回选定的所有者。 似乎如果我在查询中执行sum()或count(),那么我就不能再执行“select”(“owner”)”

我不理解这种行为。我应该怎么做才能进行“选择(“主人”),并能够根据宠物的年龄筛选它们

是否有其他方法可以编写此查询


提前谢谢

sum
count
max
这样的步骤被称为减少障碍步骤。它们导致在穿越过程中早些时候发生的事情基本上被遗忘。解决这个问题的一种方法是使用项目步骤。由于我没有您的数据,我使用了航空路线数据集,并在您的图表中使用机场海拔作为年龄的替代

gremlin> g.V(3).
           project("elev","minelev","city").
             by("elev").
             by(values("elev").inject(-10).sum()).
             by("city")

==>[elev:542,minelev:532,city:Austin]
我在这里写了一些关于减少障碍步骤的注释:

更新

如果您想找到海拔低于起始机场不超过10的机场,并避免
math
步骤,您可以使用此公式

g.V(3).as('a').
  project('min').by(values('elev').inject(-10).sum()).as('p').
  select('a').
  out().
  where(lt('a')).by('elev').
  where(gt('p')).by('elev').by('min') 

谢谢你的回答。我想根据预测值筛选人员/机场。在空中航线的例子中,我想看看一个给定的机场是否连接到另一个海拔低于原始机场但不低于10米的机场。你能给我举个这样一个查询的例子吗?
g.V(3).as('a').
  project('min').by(values('elev').inject(-10).sum()).as('p').
  select('a').
  out().
  where(lt('a')).by('elev').
  where(gt('p')).by('elev').by('min')