我正在使用 Cassandra 作为数据存储运行 Titan 0.3.2。我还使用rexpro-python通过 RexPro 与 Titan 进行交互。
问题和问题:
如果我运行这个 Python 代码:
>>> import rexpro
>>> conn = rexpro.RexProConnection('localhost', 8184, 'graph')
>>> conn.execute('g.addVertex(null, node_dict)', {'node_dict':{'my_dict':{}}})
{'_type': 'vertex', '_id': '2280164', '_properties': {'my_dict': {}}}
>>> conn.execute('g.commit()')
我可以在 Gremlin 控制台中查找生成的节点:
gremlin> g.v(2280164).map
==>{my_dict={}}
看起来my_dict
地图已正确创建:
gremlin> g.v(2280164).my_dict.getClass()
==>class java.util.HashMap
但是,我无法my_dict
使用新的键和值进行更新:
gremlin> g.v(2280164).my_dict['abc'] = 123
==>123
gremlin> g.commit()
==>null
gremlin> g.v(2280164).map
==>{my_dict={}}
如果我首先my_dict
在控制台中重置为一个新对象,我尝试添加密钥的尝试会abc
按预期工作:
gremlin> g.v(2280164).my_dict = [:]
gremlin> g.v(2280164).my_dict['abc'] = 123
==>123
gremlin> g.v(2280164).map
==>{my_dict={abc=123}}
我的问题:如何my_dict
在通过 RexPro 创建的顶点上使用新的 KV 对进行更新?
尝试的解决方法/解决方案:
当使用 Python 脚本的非参数化版本创建顶点时,也会出现同样的问题:
>>> conn.execute('g.addVertex([my_dict:[:]])')
此外,不确定是否与此问题相关,但看起来在控制台中创建的新地图是 a LinkedHashMap
(而 python/rexpro 代码创建了 a HashMap
):
gremlin> g.v(2280164).my_dict.getClass()
==>class java.util.LinkedHashMap