#node.js #gremlin #cassandra-3.0 #janusgraph
#node.js #cassandra #gremlin #janusgraph
Вопрос:
В настоящее время создается приложение с использованием 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] amp;amp; value[1]) {
edge_traversal.property(value[0], value[1])
}
})
const result = await edge_traversal.next();
if (!(result amp;amp; result.value amp;amp; 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);
}
Ответ №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
шаги в запросе edge:
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] amp;amp; value[1]) {
edge_traversal.property(value[0], value[1])
}
})
const result = await edge_traversal.next();
if (!(result amp;amp; result.value amp;amp; 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);
}