首页 > 解决方案 > 在gremlin nodejs中的顶点之间添加边

问题描述

目前正在使用 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.jsgremlincassandra-3.0janusgraph

解决方案


您无需调用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);        
    }

推荐阅读