获取数组';s TinkerPop3 Gremlin查询和JanusGraph中的第一项作为对象

获取数组';s TinkerPop3 Gremlin查询和JanusGraph中的第一项作为对象,gremlin,tinkerpop,tinkerpop3,janusgraph,graph-traversal,Gremlin,Tinkerpop,Tinkerpop3,Janusgraph,Graph Traversal,在将gremlin查询从v2迁移到v3的过程中,我遇到了这个问题 V2-way:inE().has(某些条件)。outV().map().toList()[0]将返回一个对象。这被包装在transform{label:it./etc/}步骤中 V3-way,仍然在制品:inE().has(某些条件)。outV().fold()将返回一个数组。这被包装在项目(…)中。通过(…)步骤 V3工作正常,我只需要手动从数组中打开一个项目。我想知道是否有一种更理智的方法(无论如何,这感觉像是非图形友好的步骤

在将gremlin查询从v2迁移到v3的过程中,我遇到了这个问题

V2-way
inE().has(某些条件)。outV().map().toList()[0]
将返回一个对象。这被包装在
transform{label:it./etc/}
步骤中

V3-way,仍然在制品:
inE().has(某些条件)。outV().fold()
将返回一个数组。这被包装在
项目(…)中。通过(…)
步骤

V3工作正常,我只需要手动从数组中打开一个项目。我想知道是否有一种更理智的方法(无论如何,这感觉像是非图形友好的步骤)

环境:JanusGraph,TinkerPop3+。对于v2:Titan graph db和TinkerPop2+

更新:V3查询示例

inE('edge1').
  has('cond1').outV(). // one vertex left
  project('items', 'count'). // pagination
    by(
      order().
        by('field1', decr).
          project('vertex_itself', 'vertex2', 'vertices3').
            by(identity()).
            by(outE('edge2').has('type', 'type1').limit(1).inV().fold()). // now this is empty array or single-element array, can we return element itself?
            by(inE('edge2').has('type', 'type2').outV().fold()).
          fold()).
    by(count())
所需结果形状:

[{
  items: [
    {vertex_itself: Object, vertex2: Object/null/empty, veroces3: Array},
    {}...
  ],
  cont: Number,
}]
问题:
vertex2
属性始终是一个数组,为空或单个元素。
应为:
顶点2
为对象或空/空


更新2:结果是我的查询还没有完成,如果
has('cond1').outV()中没有单个元素,它会返回许多对象,例如
[{items,count},{items,count}…]
我可能不完全理解,但从这一步听起来像:

inE().has(some condition).outV().fold()
你只需要抓住你遇到的第一个顶点。如果这是正确的,那么是否有理由折叠()?也许你可以:

inE().has(some condition).outV().limit(1)

看起来您的主要问题是从遍历中获取单个项

可以使用
next()
执行此操作,它将检索当前遍历迭代中的下一个元素:

inE().has(some condition).outV().next()
我认为迭代对象的结构是特定于实现的。e、 g.在javascript中,您可以使用
属性访问项目:

const result=wait inE().has(某些条件).outV().next();
const item=result.value;

很好,我将这样添加它
inE().has(某些条件).limit(1).outV()
。但是,
limit
步骤仍将返回包含单个元素的数组。是否可以获取元素本身或null,而不是数组?添加了关于
fold()
步骤用法的问题注释为什么
project()中有
fold()
步骤?如果我删除它们,我会得到一个错误
提供的遍历器没有映射到一个值
,现在我看到这个问题非常令人困惑,即使最初给出的查询没有像我所描述的那样工作。现在让我们关闭这个