首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gremlin如何过滤投影的结果?

Gremlin如何过滤投影的结果?
EN

Stack Overflow用户
提问于 2021-09-28 17:29:58
回答 3查看 164关注 0票数 0

我有一个这样的查询

代码语言:javascript
运行
复制
g.V.has('id', 1).outE()
        .project('edge','vertex')
           .by(valueMap('number'))
           .by(inV().valueMap())

它返回一个字典,如下所示:{"edge":{ ...},"vertex":{ ...,"city":一个值,... }

我想根据inV()顶点的值对其进行过滤。顶点有一个名为" city“的属性,在我进行投影之后,我想过滤掉结果中城市名称不是New York的所有结果。

我试过了

代码语言:javascript
运行
复制
g.V().has('id', 1).outE()
        .project('edge','vertex')
           .by(valueMap('number'))
           .by(inV().valueMap())
.filter(select('vertex').select('city').is(eq("New York"))) 

但它不会返回任何内容

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-28 17:53:16

我认为,如果您选择像PrashantUpadhyay提供的答案中那样预先过滤,那么您的遍历可读性会更好,性能也会更好。如果我可以建立在这个想法的基础上,我会建议通过删除所有的步骤标签并以这种方式进行过滤来消除打开路径跟踪的需要:

代码语言:javascript
运行
复制
g.V().has('id', 1).outE().
  filter(inV().has('name','New York')).
  project('edge','vertex').
    by(valueMap('number')).
    by(inV().valueMap())

如果出于某种原因,您必须过滤生成的Map,那么:

代码语言:javascript
运行
复制
g.V().has('id', 1).outE().
  project('edge','vertex').
    by(valueMap('number')).
    by(inV().valueMap()).
  filter(select('vertex').select('city').unfold().is(eq("New York")))

问题是valueMap()会产生一个List,所以你必须用unfold()来评估它的内容。如果不需要在结果中包含unfold(),我想您也可以在valueMap()中执行List

代码语言:javascript
运行
复制
g.V().has('id', 1).outE().
  project('edge','vertex').
    by(valueMap('number')).
    by(inV().valueMap().by(unfold())).
  filter(select('vertex').select('city').is(eq("New York")))
票数 0
EN

Stack Overflow用户

发布于 2021-09-28 17:44:50

一种简单的方法是根据您的要求将传入遍历过滤到之前的项目步骤。

代码语言:javascript
运行
复制
 g.V().
 hasId("1").
 outE().as("a").
 inV().
 has("name", "New York").as("b").
 project("edge", "vertex").
   by(select("a").valueMap("number")).
   by(select("b").valueMap())
票数 0
EN

Stack Overflow用户

发布于 2021-09-28 18:02:38

您的查询看起来是正确的,但是如果没有脚本来重现您的数据,就很难验证哪里可能是错误的。但是,使用此查询,您应该能够重写它,以便在project()之前过滤遍历,如下所示。这将最大限度地减少遍历器的数量,并最有可能提高性能:

代码语言:javascript
运行
复制
g.V().has('id', 1).has('city', 'New York').as('a').outE()
    .project('edge','vertex')
       .by(valueMap('number'))
       .by(select('a').valueMap())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69366121

复制
相关文章

相似问题

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