gremlin - 为多个顶点中的每一个添加不同的值
问题描述
我知道我可以在一个步骤中通过 id 选择多个特定顶点,例如(使用 gremlin-python 语法):
g.V([1, 2, 3]).next()
>>> [v[1], v[2], v[3]]
然后,如何为这些选定项目中的每一个添加具有不同值的属性?例如,我想要这样:
- 顶点 1 具有属性“x”,值为“a”
- 顶点 2 的属性为“x”,值为“b”
- 顶点 3 具有属性“x”,值为“c”
所以我想能够说类似的话:
g.V([1, 2, 3]).<add property 'x' with values ['a', 'b', 'c']>.next()
可能吗?
解决方案
您可以使用choose()来完成类似的事情,这将为您提供 if-then-else 类型的分支。使用 TinkerPop 发行版附带的现代玩具图:
gremlin> g.V(1,2,3).
......1> choose(id()).
......2> option(1, property('switch','a')).
......3> option(2, property('switch','b')).
......4> option(3, property('switch','c')).iterate()
gremlin> g.V(1,2,3).
......1> project('id','switch').
......2> by(id).
......3> by('switch')
==>[id:1,switch:a]
==>[id:2,switch:b]
==>[id:3,switch:c]
从 TinkerPop 3.3.3 开始,您还可以做这样的事情,它会使用副作用:
gremlin> g.withSideEffect('x',[1:'a',2:'b',3:'c']).
......1> V(1,2,3).as('v').
......2> property('switch', select('x').
......3> select(select('v').id()))
==>v[1]
==>v[2]
==>v[3]
gremlin> g.V(1,2,3).
......1> project('id','switch').
......2> by(id).
......3> by('switch')
==>[id:1,switch:a]
==>[id:2,switch:b]
==>[id:3,switch:c]
您需要 3.3.3+,因为您需要能够select()
运行仅在该版本中添加的生成密钥。
我不认为你可以使用Map
“x”的键来处理没有 lambda 的顶点的查找(也许我没有想到简单的事情),所以不幸的是你必须指定两次 id,但是你可以很容易地对其进行参数化,因为您只需要构造 theMap
然后.keys()
从中获取 to 即可V()
。
推荐阅读
- angular - ngrx 效果:调度空动作
- amazon-web-services - 使用 AWS Cloudfront 缓存查询时如何向 api 添加简单许可
- python - pytest pep8 合规性检查卡住了
- java - Junit 测试方法 - 无法解析符号 '.ok()'
- inheritance - 如何更改 no_create:odoo 中的 False
- javascript - 配置 router.beforeEach
- javascript - JSGrid以编程方式选择第一行
- opencv - AruCo 标记的稳定性
- c# - 字段是可序列化类型的成员,但属于不可序列化类型
- scala - 在 Doobie 中并行运行查询