Sack Sum By 操作导致 AWS Neptune 错误
Sack Sum By operation causes AWS Neptune error
前期问题:AWS Neptune 在使用 .sack(__.sum).by()
操作时似乎出现故障。
背景:
- Here is a small bit of data 测试
- The query 有问题 通过 Gremlin 控制台工作正常
- 我遇到了这个 tackling a larger problem,但是那个 post 的长度(以及我对它的多次更新...)掩盖了问题,所以我 post在这里,分开。
条件
- 数据存储:AWS Neptune
- 从/运行时查询:AWS Lambda 运行 Node.js
鉴于上述情况,此查询将执行:
return await g.withSack(120)
.V(fromPortId)
.repeat(
(__.outE().hasLabel('VOYAGES_TO'))
.inV()
.simplePath()
)
.until(
__.has('code', toPortId).and()
.sack().is(lte(travelTimeBudget))
)
.order().by(__.sack(), __.desc)
.local(
__.union(__.path().by('code')
.by('duration'), __.sack()).fold()
)
.local(
__.unfold().unfold().fold()
)
.toList()
.then(data => {
return data
})
.catch(error => {
console.log('ERROR', error);
});
... 但是这个查询不会:
return await g.withSack(120)
.V(fromPortId)
.repeat(
(__.outE().hasLabel('VOYAGES_TO').sack(__.sum).by('duration'))
.sack(__.sum).by(__.constant(45))
.inV()
.simplePath()
)
.until(
__.has('code', toPortId).and()
.sack().is(lte(travelTimeBudget))
)
.order().by(__.sack(), __.desc)
.local(
__.union(__.path().by('code')
.by('duration'), __.sack()).fold()
)
.local(
__.unfold().unfold().fold()
)
.toList()
.then(data => {
return data
})
.catch(error => {
console.log('ERROR', error);
});
...两者之间的唯一区别是 .sack(__.sum).by()
运算符的存在。
有什么想法或建议吗?
您不应在 sack
步骤中使用 __.sum
,因为那是实际的 sum()
步骤(来自匿名遍历 __.
)而不是 Operator.sum
枚举。理想情况下,您应该将它们包含在代码的顶部,或者使用:
(__.outE().hasLabel('VOYAGES_TO').sack(operator.sum).by('duration'))
.sack(operator.sum).by(__.constant(45))
此代码块周围的附加括号也不需要。
前期问题:AWS Neptune 在使用 .sack(__.sum).by()
操作时似乎出现故障。
背景:
- Here is a small bit of data 测试
- The query 有问题 通过 Gremlin 控制台工作正常
- 我遇到了这个 tackling a larger problem,但是那个 post 的长度(以及我对它的多次更新...)掩盖了问题,所以我 post在这里,分开。
条件
- 数据存储:AWS Neptune
- 从/运行时查询:AWS Lambda 运行 Node.js
鉴于上述情况,此查询将执行:
return await g.withSack(120)
.V(fromPortId)
.repeat(
(__.outE().hasLabel('VOYAGES_TO'))
.inV()
.simplePath()
)
.until(
__.has('code', toPortId).and()
.sack().is(lte(travelTimeBudget))
)
.order().by(__.sack(), __.desc)
.local(
__.union(__.path().by('code')
.by('duration'), __.sack()).fold()
)
.local(
__.unfold().unfold().fold()
)
.toList()
.then(data => {
return data
})
.catch(error => {
console.log('ERROR', error);
});
... 但是这个查询不会:
return await g.withSack(120)
.V(fromPortId)
.repeat(
(__.outE().hasLabel('VOYAGES_TO').sack(__.sum).by('duration'))
.sack(__.sum).by(__.constant(45))
.inV()
.simplePath()
)
.until(
__.has('code', toPortId).and()
.sack().is(lte(travelTimeBudget))
)
.order().by(__.sack(), __.desc)
.local(
__.union(__.path().by('code')
.by('duration'), __.sack()).fold()
)
.local(
__.unfold().unfold().fold()
)
.toList()
.then(data => {
return data
})
.catch(error => {
console.log('ERROR', error);
});
...两者之间的唯一区别是 .sack(__.sum).by()
运算符的存在。
有什么想法或建议吗?
您不应在 sack
步骤中使用 __.sum
,因为那是实际的 sum()
步骤(来自匿名遍历 __.
)而不是 Operator.sum
枚举。理想情况下,您应该将它们包含在代码的顶部,或者使用:
(__.outE().hasLabel('VOYAGES_TO').sack(operator.sum).by('duration'))
.sack(operator.sum).by(__.constant(45))
此代码块周围的附加括号也不需要。