获取数组';s TinkerPop3 Gremlin查询和JanusGraph中的第一项作为对象
在将gremlin查询从v2迁移到v3的过程中,我遇到了这个问题 V2-way:获取数组';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工作正常,我只需要手动从数组中打开一个项目。我想知道是否有一种更理智的方法(无论如何,这感觉像是非图形友好的步骤
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()
步骤?如果我删除它们,我会得到一个错误提供的遍历器没有映射到一个值
,现在我看到这个问题非常令人困惑,即使最初给出的查询没有像我所描述的那样工作。现在让我们关闭这个