当前正在使用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);
}
答案 0 :(得分:0)
您无需调用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();
});
});