【问题标题】:gremlin add vertex between two vertex - in a single query?gremlin 在两个顶点之间添加顶点 - 在单个查询中?
【发布时间】:2021-04-30 11:44:46
【问题描述】:

假设我有一个社交图谱,其中一部分代表参加聚会的人,还有一个用于跟踪邀请的应用。我有一个顶点给约翰,一个顶点给大卫,他们都参加了同一个聚会。

在应用程序中,约翰说他邀请了莎拉,大卫说他是受莎拉邀请的,但我没有莎拉的顶点。

在单个查询中,我可以创建 Sarah 并将 John 连接到 Sarah 并将 Sarah 连接到 David 吗?

到目前为止,我能做的最好的事情是使用合并模式获取或创建以下内容来确定 Sarah 是否从以下人员中丢失:

g.V().has('name', 'John').out().has('name', 'Sarah').as_('x').out().has('name', 'David').select('x').fold().coalesce(unfold(), constant('how to I put Sarah between John and David here?')).next()

这一切都可以在一个查询中完成吗 - 用多步变异遍历替换我的常量?

编辑:

我更进一步。如果我已经有 Sarah 的顶点,我认为以下方法有效: g.V().has('name', 'John').addE('invited').to(g.V().has('name', 'Sarah').as_('x').addE('invited').to(g.V().has('name', 'David')).select('x')).next()

这是推荐的方法吗?有没有办法在同一个查询中创建 Sarah 顶点?我可以在里面再嵌套一个.fold().coalesce(unfold(), ...) 吗?

【问题讨论】:

    标签: gremlin janusgraph gremlinpython


    【解决方案1】:

    首先检查 Sarah,如果未找到则创建可能会简化您的查询。这是来自 Gremlin 控制台。

    gremlin> g.addV('person').property('name','John')
    ==>v[62869]
    gremlin> g.addV('person').property('name','David')
    ==>v[62871]    
    
    gremlin> g.V().has('name','Sarah').
    ......1>   fold().
    ......2>   coalesce(unfold(),
    ......3>             addV('person').property('name','Sarah')).as('s').
    ......4>   addE('invited').to(V().has('name','David')).
    ......5>   addE('invited').from(V().has('name','John')).to('s')    
    ==>e[62876][62869-invited->62873] 
    
    gremlin> g.V().has('name','Sarah').outE().inV().path().by('name').by(label)
    ==>[Sarah,invited,David]
    gremlin> g.V().has('name','Sarah').inE().outV().path().by('name').by(label)
    ==>[Sarah,invited,John] 
    

    【讨论】:

    • 啊,谢谢!这表明我仍然需要围绕图形建模培养更好的直觉。我没想到我可以将“到”边和“从”边链接到同一个新顶点。这看起来正是我想要做的。
    猜你喜欢
    • 2015-07-06
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2020-12-13
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多