【问题标题】:Gremlin Cayley query: How to have a multi leveled queryGremlin Cayley 查询:如何进行多级查询
【发布时间】:2015-07-08 17:10:25
【问题描述】:

cayley 新手,不知道如何显示级别数未知的多级查询。

例如,假设节点之间的所有谓词/关系都是“喜欢”。 如果我有一个这样的图形。

A --> B

B --> C

C --> D

D --> E

...

我想跟随火车并显示整个点赞图表。我会使用什么查询?这是我尝试过的。

function getLikes(x) { 
    return g.V(x).As("source").Out("likes").As("target)
}

getLikes("A").ForEach( function(d) {
    g.Emit(getLikes(d))
})

这只返回

{

“结果”:[

{

“全部”:{},

“和”:{},

“作为”:{},

“返回”:{},

... 以及所有其他路径选项

我也试过

return g.V(x).As("source").Out("likes").As("target).All()

而不是第二行代码。只需在末尾添加 .All() 即可完成查询。这将返回查询结果,但可视化工具不显示任何内容。任何有关如何显示此类图表的指导将不胜感激!

【问题讨论】:

    标签: graph-databases cayley


    【解决方案1】:

    我不确定你是否还需要这个,但我还是会写,因为我必须从 Cayley 上几乎不存在的基于示例的文档中学习同样的东西。

    为了遍历一个图,Cayley 在API 中定义了一个.FollowRecursive() 方法。 .FollowRecursive 方法使用称为 Morphism 的东西来计算如何递归地跟随路径。据我了解,它似乎是一个抽象路径对象,它对递归情况进行编码(有点像你的 getLikes 函数(但不完全是))。这是一个 Gizmo 查询示例,它应该适用于完整的图/链遍历。

    var path = g.M().Out("edge_name_here");
    var start_node = "begin";
    
    //Path query
    //Note that FollowRecursive expects a Morphism path
    g.V(start_node).FollowRecursive(path).All() //That's all.
    

    要可视化整个遍历或对每个顶点进行进一步查询,请使用 .ForEach() 构造(请参阅 API)

    g.V(start_node).FollowRecursive(path).ForEach( function(v){
      //In here we can do further querying or more vaguely put "stuff"
      g.V(v.id).Out(chain_pred).ForEach( function(t){
        var node = { //This source, target formulation works for visualization for eg.
          source: v.id,
          target: t.id
        }
    
        g.Emit(node) //This throws the output into the final result bucket
      })
    })
    

    我希望宇宙中有人觉得它有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多