【问题标题】:add edge between vertices in gremlin nodejs在gremlin nodejs中的顶点之间添加边
【发布时间】:2020-12-13 12:19:38
【问题描述】:

目前正在使用 nodejs 和 gremlin 构建应用程序。 我通过 nodejs 创建了顶点。现在我正在寻找在两个顶点之间创建边。我尝试了很多选择。不走运!

const gFromNode = await get_vertex(fromNodeLabel, fromNodePropName, fromNodePropValue);
const gToNode = await get_vertex(toNodeLabel,toNodePropName,toNodePropValue);

        const edge_traversal = this.g.V(fromNodeLabel).property(fromNodePropName, fromNodePropValue).as('X').
                                V(toNodeLabel).property(toNodePropName, toNodePropValue).as('Y').
                                addE(edgeLabel).from('X').to('Y');

        Object.entries(edgeProperties).map(value => {
            if (value[0] && value[1]) {
                edge_traversal.property(value[0], value[1])
            }
        })

    const result = await edge_traversal.next();

    if (!(result && result.value && result.value.id)) {
        throw graph_constants.unable_to_create_edge;
    } else {
        "Edge created"
    }

==== seperate function =====
 async get_vertex(labelName, property, value) {
        if (!labelName || !property || !value) {
            return error;
        }
        return await this.g.V().hasLabel(labelName).has(property,value);        
    }

【问题讨论】:

    标签: node.js gremlin cassandra-3.0 janusgraph


    【解决方案1】:

    您无需调用get_vertex 方法,您可以在一个查询中完成:

    const __ = gremlin.process.statics;
    
    g.V().
      has(fromNodePropName, fromNodePropValue).
      addE(edgeLabel).to(__.V().
        has(toNodePropName, toNodePropValue))
    

    示例:https://gremlify.com/lxpvd6z6yuj

    另外,get_vertex 方法缺少终端步骤,如果你想使用它并且你不需要边缘查询中的property 步骤:

    const gFromNode = await get_vertex(fromNodeLabel, fromNodePropName, fromNodePropValue);
    const gToNode = await get_vertex(toNodeLabel,toNodePropName,toNodePropValue);
    
    const edge_traversal = this.g.V(fromNodeLabel.id).as('X').V(toNodeLabel.id).as('Y').
                            addE(edgeLabel).from('X').to('Y');
    
    Object.entries(edgeProperties).map(value => {
      if (value[0] && value[1]) {
        edge_traversal.property(value[0], value[1])
      }
    })
    
    const result = await edge_traversal.next();
    
    if (!(result && result.value && result.value.id)) {
      throw graph_constants.unable_to_create_edge;
    } else {
      "Edge created"
    }
    
    ==== seperate function =====
     async get_vertex(labelName, property, value) {
            if (!labelName || !property || !value) {
                return error;
            }
            return await this.g.V().hasLabel(labelName).has(property,value).next().then(res => res.value);        
        }
    

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多