#node.js #gremlin #graph-databases #tinkerpop #tinkerpop3
Вопрос:
Я хотел бы знать, как добавить в результат свойство ребра, которое связывает узел с другим узлом
Я использую node.js для выполнения запросов к базе данных Neptune через Gremlin. Затем я отправляю результат в Javascript через API.
let data = [];
const id_vertex = "1"
data = await g.V().has(id,id_vertex)
.out()
.valueMap()
.with_('~tinkerpop.valueMap.tokens'))
.toList();
Вот как выглядят данные:
[
{
name: [ 'Colt Bogan II' ],
label: 'User',
notification: [ 'Both' ],
usercity: [ 'Wardburgh' ],
id: '1',
RegisteredDate: [ '2010-10-14' ]
},
{
name: [ 'Webster Sanford' ],
label: 'User',
notification: [ 'SMS' ],
usercity: [ 'Nanniefurt' ],
id: '2',
RegisteredDate: [ '2006-02-03' ]
}
]
Затем я использую JSON.stringify, чтобы создать текст того, что я отправляю обратно в javascript
body: JSON.stringify(data)
"body":
"[{"name":["Colt Bogan II"],"label":"User","notification":["Both"],"usercity":["Wardburgh"],"id":"1","RegisteredDate":["2010-10-14"]},
{"name":["Webster Sanford"],"label":"User","notification":["SMS"],"usercity":["Nanniefurt"],"id":"2","RegisteredDate":["2006-02-03"]}]"
Я хотел бы добавить свойство ребра, которое соединяет мой узел с идентификатором id_vertex, с другим узлом (при возврате всех свойств этого узла) в теле. Либо пока я делаю запрос Гремлина, либо после этого. Допустим, что свойство края, которое меня интересует, — это цвет, тогда, в конце концов, тело, которое я хотел бы выглядеть так:
"body":
"[{"edgeColor":["Green"], "name":["Colt Bogan II"],"label":"User","notification":["Both"],"usercity":["Wardburgh"],"id":"1","RegisteredDate":["2010-10-14"]},
{"edgeColor":["Blue"], "name":["Webster Sanford"],"label":"User","notification":["SMS"],"usercity":["Nanniefurt"],"id":"2","RegisteredDate":["2006-02-03"]}]"
Кроме того, у меня есть максимум одно ребро от одного узла к другому, если это поможет
Ответ №1:
Если вы немного измените свой запрос, вы можете включить свойства ребра в результат.
let data = [];
const id_vertex = "1"
data = await g.V().has(id,id_vertex)
.outE()
.project('edge','vertex')
.by(valueMap('edgeColor'))
.by(inV().valueMap().with_('~tinkerpop.valueMap.tokens'))
.toList();
Комментарии:
1. Большое спасибо! Если бы edgeColor был значением (например, 10, 20), вы также знаете, как я мог бы вернуть результат, упорядоченный в порядке убывания?
2. неважно, теперь я знаю, как это сделать
3. Я рад, что у тебя все получилось. Я был бы признателен, если бы вы приняли ответ, если бы он сработал для вас, чтобы другие могли видеть, что проблема решена. Большое спасибо.