Gremlin - Cosmos DB新增顶点时如何在单顶点内存储多个列表
Gremlin操作Cosmos DB新增带多列表属性顶点的实现方案
Azure Cosmos DB 的 Gremlin API 中,列表属性通过指定**多值基数(Cardinality.list)**实现,嵌套对象可直接存储(需环境支持复杂类型)或序列化为JSON字符串存储(通用兼容方案)。
方案1:直接存储嵌套对象(推荐,环境支持时用)
Gremlin 中调用 property() 方法时,第一个参数传入 list 声明该属性为列表类型,后续直接传入嵌套对象即可,匹配你需求的查询语句如下:
g.addV('person') // 指定顶点id和label .property(id, '95fcfa87-1c03-436d-b3ca-340cea926ee9') // 新增States列表属性,单个元素直接传入对象 .property(list, 'States', [ "DeviceCount": "12", "SC_ItemStatus": "2", "SC_ItemWarningStatus": "0", "SC_SysemStandardPercentage": "1" ]) // 新增log列表属性 .property(list, 'log', [ "user": "user@user.dk", "action": "update", "timestamp": "22-03-2017", "field": "firstName", "oldValue": "Marco" ])
如果需要给单个列表添加多个元素,可直接在参数后追加,或多次调用 property(list, '属性名', 新元素),会自动追加到列表末尾,不会覆盖原有值。
方案2:通用兼容方案(JSON序列化存储)
如果你的Gremlin驱动或Cosmos DB版本不支持直接存储嵌套对象,可先将列表元素序列化为JSON字符串再存入,查询时在业务侧反序列化即可:
g.addV('person') .property(id, '95fcfa87-1c03-436d-b3ca-340cea926ee9') .property(list, 'States', '{"DeviceCount":"12","SC_ItemStatus":"2","SC_ItemWarningStatus":"0","SC_SysemStandardPercentage":"1"}') .property(list, 'log', '{"user":"user@user.dk","action":"update","timestamp":"22-03-2017","field":"firstName","oldValue":"Marco"}')
常用补充操作
- 覆盖已有列表:先删除原有属性再重新赋值
g.V('95fcfa87-1c03-436d-b3ca-340cea926ee9').properties('log').drop() .property(list, 'log', 新元素1, 新元素2) - 追加列表元素:直接调用带list基数的property方法即可
g.V('95fcfa87-1c03-436d-b3ca-340cea926ee9').property(list, 'log', 新日志对象)
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

