Azure Cosmos DB中Gremlin none()步骤的替代方案及遍历方法咨询
Cosmos DB中Gremlin none()步骤的替代方案及.iterate()的替代方法
none()步骤的替代方案
- 直接用
constant(null)替换none():none()本质是返回空遍历,constant(null)返回包含null的单元素遍历,多数场景下逻辑等价,且Cosmos DB完全支持该步骤。 - 分支/过滤场景下改用
isEmpty()判断:比如原逻辑g.V().hasLabel('user').none(),可以改成g.V().hasLabel('user').filter(__.isEmpty()),通过过滤空遍历实现相同效果。
用.toList()替代.iterate()完全可行
iterate()的作用是执行遍历但丢弃结果,底层会自动追加none()导致Cosmos DB报错;而toList()会返回遍历结果,但对于写入类操作(比如添加顶点),调用toList()同样会完整执行写入逻辑,只是会返回创建的顶点对象列表。如果不需要结果,直接忽略返回值就行,完美避开none()的问题。
另外也可以用next()替代,但next()在遍历无结果时会抛出NoSuchElementException,所以toList()更安全,无结果时只会返回空列表。
示例代码
替换none()
// 原遍历(Cosmos DB报错) // g.V().has('id', '123').none() // 替代方案1:constant(null) g.V().has('id', '123').constant(null) // 替代方案2:isEmpty()过滤 g.V().has('id', '123').filter(__.isEmpty())
替换iterate()添加顶点
// 原代码(自动加none(),报错) // g.addV('user').property('name', 'Alice').iterate(); // 改用toList() g.addV('user').property('name', 'Alice').toList(); // 无需处理返回值,写入操作已执行
内容的提问来源于stack exchange,提问作者StephenLight
相关产品推荐
相关产品推荐

