Node.js 我无法获取已遍历顶点数据的数据。有人能帮我吗?

Node.js 我无法获取已遍历顶点数据的数据。有人能帮我吗?,node.js,gremlin,janusgraph,Node.js,Gremlin,Janusgraph,我在两个顶点(比如v1和v2)之间有一条边(比如说边)。边缘方向从v1到v2。在我目前的情况下,我必须根据某些条件计算进入v2的边数。现在我可以计算边的数量,但无法检索v2的数据 g.V().hasLabel('V2').has('type','c').as('p').project('v2Data').by(select('p').inE('edge').count().is(gt(5)).valueMap(true)) 通过上述方法,我得到了一个错误 java.lang.Long

我在两个顶点(比如v1和v2)之间有一条边(比如说边)。边缘方向从v1到v2。在我目前的情况下,我必须根据某些条件计算进入v2的边数。现在我可以计算边的数量,但无法检索v2的数据

     g.V().hasLabel('V2').has('type','c').as('p').project('v2Data').by(select('p').inE('edge').count().is(gt(5)).valueMap(true))
通过上述方法,我得到了一个错误

java.lang.Long cannot be cast to org.apache.tinkerpop.gremlin.structure.Element
我尝试的另一种方法是

     g.V().hasLabel('v2').has('type','c').as('p').project('v2Data').by(select('p').inE('edge').count().is(gt(5)).select('p').valueMap(true))

The provided traverser does not map to a value: v[286724240]->[SelectOneStep(last,p), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,[willingToPlayAt],edge), RangeGlobalStep(0,6), CountGlobalStep, IsStep(gt(5)), SelectOneStep(last,p), NoOpBarrierStep(2500), PropertyMapStep(value)]
我尝试过这个堆栈溢出的答案

我希望输出为v2data=[{},{}]

参考:
g.addV('game')。属性('id',1)。as('1')。
addV('game')。属性('id',2)。as('2')。
addV('game')。属性('id',3)。as('3')。
addV('game')。属性('id',4)。as('4')。
addV('game')。属性('id',5)。as('5')。
addV('game')。属性('id',6)。as('6')。
addV('loc')。属性('id',p1)。as('p1')。
addV('loc')。属性('id',p2)。as('p2')。
将(‘边缘’)从(‘1’)添加到(‘p1’)。
将(‘边缘’)从(‘2’)添加到(‘p1’)。
将(‘边缘’)从(‘3’)添加到(‘p1’)。
将(‘边’)从(‘4’)添加到(‘p1’)。
将(‘边缘’)从(‘5’)添加到(‘p1’)。
将(‘边缘’)从(‘6’)添加到(‘p1’)。
将(‘边’)从(‘1’)添加到(‘p2’)。
将('2')添加到('p2')

查询:

g.V().hasLabel('loc').has('type','c').
  project('locData').
  by(where(inE('edge').count().is(gt(5))).valueMap(true).fold())
预期产出:

{locData=[{id=[p1],....}]}
因为gt(5)仅适用于id=p1的loc

但我得到的结果是

{locData=[{id=[p1],....}]}
{locData=[]}(p2 is not satisfied with my condition.)

我不完全清楚你想做什么,但这个错误很容易解释。您正在调用
count()
,这是一个减少步骤,会产生
。然后,您尝试对产生错误的
Long
调用
valueMap()
,因为
valueMap()
只能在
元素上调用(例如
顶点

因此,如果我按原样接受您的查询,如果您执行以下操作,它应该开始返回一些内容:

g.V().hasLabel('V2').has('type','c').as('p').
  project('v2Data').
    by(select('p').where(inE('edge').count().is(gt(5))).valueMap(true).fold())
您需要
fold()
,这样,如果您的条件不满足,那么如果您的过滤器不返回任何值,您将得到返回的内容(即
fold()
在这种情况下将减少为空列表)

也就是说,您的查询仍然需要一些工作。首先,我不认为需要“p”,因为它的值是流中的当前遍历,所以:

g.V().hasLabel('V2').has('type','c').
  project('v2Data').
    by(where(inE('edge').count().is(gt(5))).valueMap(true).fold())
然后,我更喜欢结合两个
has()
步骤:

g.V().has('V2','type','c').
  project('v2Data').
    by(where(inE('edge').count().is(gt(5))).valueMap(true).fold())
最后,您不需要对所有边进行计数()
来确定边数是否超过“5”,您只需要最大值为“6”,因此可能:

g.V().has('V2','type','c').
  project('v2Data').
    by(where(inE('edge').limit(6).count().is(gt(5))).valueMap(true).fold())

,我尝试过这种方法。
g.V().hasLabel('V2')。has('type','c')。project('v2Data')。by(其中(inE('edge')。count().is(gt(5)))。valueMap(true)。fold())
。由于fold()的原因,我得到的输出是==>{v2Data[{id:id1,name:name1}]}=>{v2Data=[]}==>{v2Data=[]}。如果我的条件为真,我得到的数据是正常的。但我不想在条件失败时得到空数组。那么,除了fold()之外,您还可以提出其他建议吗?那么,您想要什么来代替空数组呢?或者你只是不知道这个顶点首先代表什么?我认为,如果你想要一个更准确的答案,你应该编辑你的问题,包括如下所示的样本数据:然后是一些预期的输出。