在gremlin nodejs中的顶点之间添加边

问题描述

当前正在使用nodejs和gremlin构建应用程序。 我通过nodejs创建了Vertices。现在,我正在寻找在两个顶点之间创建边的方法。我尝试了很多选择。没有运气!!

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);        
    }

解决方法

您无需调用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); } 缺少终端步骤:

const https = require("https");

it("wait for some result",function (done) {
  this.timeout(15000);
  const options = {
    hostname: "httpbin.org",path: "/get",headers: {
      Authorization: "bearer ",},};
  https.get(options,(resp) => {
    let data = "";
    // A chunk of data has been recieved.
    resp.on("data",(chunk) => {
      data += chunk;
      console.log(data);
    });
    // The whole response has been received. Print out the result.
    resp.on("end",() => {
      console.log(JSON.parse(data).explanation);
    });

    resp.on("error",(err) => {
      console.log("Error: " + err.message);
    });
    done();
  });
});

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...