首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gremlinpython以CosmosDB格式直接向GraphSON添加图顶点

使用gremlinpython以CosmosDB格式直接向GraphSON添加图顶点
EN

Stack Overflow用户
提问于 2018-06-04 21:55:41
回答 2查看 921关注 0票数 0

我使用gremlinpython连接到CosmosDB图,并希望能够使用GraphSON格式的字典直接添加顶点。具体来说,我希望避免必须动态构建gremlin查询,例如:

代码语言:javascript
复制
"g.addV('person').property(...)..."

相反,运行如下所示:

代码语言:javascript
复制
my_dict = {'id':'something', 'label':'person', 'outE':{}, 'properties':{}}
_gremlin_insert_vertex = "g.addV('person').use_my_graphson_dict({})".format(my_dict)
callback = client.submitAsync(_gremlin_insert_vertex)

或者其他类似的东西。Azure门户有来自我运行的查询(例如"g.V()")的顶点的JSON表示,但我希望能够使用gremlinpython将其输入Python,进行更新,然后将JSON发回更新或添加一个顶点。我似乎找不到任何关于如何在GraphSON dict和gremlin对象或查询之间进行转换的文档。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-05 10:26:43

Gremlin中根本没有这样的API。它没有一个可以接受GraphSON或Dictionary (Map in Java)的步骤来将其本机转换为property()步骤。多年来,TinkerPop社区对这一主题进行了大量讨论,因为这样一步的用户方便程度可以说是很高的,特别是在您描述的上下文中。不幸的是,引入Map并不能很好地适应API,因为它一开始就不允许设置多属性,除非步骤签名接受了Map<Object,List<Object>> (即在Dictionary中,键是StringT,值是任意对象的List ),这样的构造和推理更加复杂。此外,当在设置元属性的一般上下文中使用时,该API并不能很好地考虑元属性。还有其他反对的理由,但这些都是我脑海中最突出的观点。

至于接受GraphSON本身的步骤(我认为这将缓解我前面提到的多个/元属性的一些问题),我认为这还没有被提出过。不过,我不确定这是如何工作的,因为GraphSON是IO操作的函数,Gremlin语言本身对此一无所知。IO是一个远离Gremlin的抽象,我不知道它是否适合那里。我还认为,大多数用户抱怨GraphSON的复杂性(带有嵌入式列表或列表的字典等等),手工构建GraphSON并不简单,因此我怀疑许多人是否会觉得这样的API对他们有吸引力。多/元-属性再次罢工!:)

我还要说,TinkerPop非常反对构造Gremlin的字符串。您现在不得不在CosmosDB中这样做,因为他们还不支持字节码API。有了这种支持(他们正在做的事情),您将不再将Gremlin作为String值提交,而是用您最喜欢的本地语言(在您的例子中是Python)编写Gremlin。因此,进一步鼓励用户“构造字符串”的开发路径,无论是GraphSON还是Gremlin,都可能会受到阻碍。

现在,在Python中,您可以自己构建这个方法,作为自定义Gremlin的一部分,它基本上接受Dictionary并将其转换为property()调用。由于逻辑是特定于您的应用程序,您可以考虑任何元/多属性问题,您可能有,也可能没有。您可以阅读有关如何构建DSL 这里的更多信息,并在本博客文章系列文章中了解更多有关实现模式的信息:第一部分第二部分第三部分

我认为,我们可能会在4.x中看到这种原生于Gremlin的API,当时人们越来越倾向于放弃对多/元属性的支持,但在那之前,还没有多少好的想法。

票数 3
EN

Stack Overflow用户

发布于 2019-07-28 22:10:37

这已经晚了一年了,所以现在你要么已经解决了,要么已经不在乎了,但为了子孙后代.

您可以对图形集合使用sql客户端,并使用insert document方法向顶点发送具有有效Graphson结构的json:

就像这样:

代码语言:javascript
复制
{
    "label": "person",
    "firstName": [{
        "_value": "Thomas",
        "id": "5267ec4b-a39e-4d77-8dea-668cb36307bc"
    }],
    "lastName": [{
        "_value": "Andersen",
        "id": "2e5271a6-ddd8-48b9-8ff6-be41e19f82f8"
    }],
    "age": [{
        "_value": 44,
        "id": "1c9a57cc-3324-4a0c-b4c3-d494fbb3fb81"
    }],
    "PartitionKey": "123",
    "id": "a9b57684-16bf-47d9-8761-570bab43ca7b"
}

不久前,我已经对它进行了博客测试--不过我只在.NET SDK中测试过它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档