首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GremlinAPI在CosmosDB中简化计算

如何使用GremlinAPI在CosmosDB中简化计算
EN

Stack Overflow用户
提问于 2020-06-05 21:26:08
回答 1查看 116关注 0票数 1

我正在使用CosmosDB和GremlinAPI,我想执行简单的计算,即使CosmosDB不支持数学步骤。

假设我有一个属性为Age的顶点"Person“,它可以有一条边"Owns”到另一个同样具有属性Age的顶点"Pet“。我想知道一个人是否有一只比这个人年轻但不超过10岁的猫。

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

代码语言:javascript
复制
g.V().hasLabel("Person").has("Name", "Jonathan Q. Arbuckle").as("owner").values("age").inject(-10).sum().as("minAge").select("owner")

返回一个空结果,但

代码语言:javascript
复制
g.V().hasLabel("Person").has("Name", "Jonathan Q. Arbuckle").as("owner").values("age").inject(-10).as("minAge").select("owner")

返回选定的所有者。似乎如果我在查询中做了sum()或count(),那么我就不能再做'select("owner")‘了。

我不理解这种行为。我应该怎么做才能进行“选择(”所有者“)”,并且能够根据宠物的年龄来过滤它们。

有没有其他方法可以写这个查询?

提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2020-06-06 22:29:28

sumcountmax这样的步骤被称为减少障碍步骤。它们会导致在遍历之前发生的事情基本上被遗忘。解决此问题的一种方法是使用项目步骤。因为我没有您的数据,所以我使用了airport数据集,并在您的图表中使用了机场高度作为年龄的替代品。

代码语言:javascript
复制
gremlin> g.V(3).
           project("elev","minelev","city").
             by("elev").
             by(values("elev").inject(-10).sum()).
             by("city")

==>[elev:542,minelev:532,city:Austin]

我在这里写了一些关于减少障碍步骤的注释:http://kelvinlawrence.net/book/PracticalGremlin.html#rbarriers

已更新

如果您希望找到比起始机场低不超过10的高程的机场,并避免math步骤,您可以使用此公式。

代码语言:javascript
复制
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') 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62216414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档