Не удается добавить свойства края в Neptune/Gremlin?
Я пытался добавить ребра к существующим вершинам и присвоить им определенный идентификатор и некоторые свойства, используя библиотеку Gremlin в nodeJS (подключение к графу AWS Neptune). Однако, хотя кажется, что ребра созданы, идентификатор и свойства были полностью упущены. Также я объясню, чего я пытаюсь добиться, чтобы запрос гремлина был более ясным: у ребер есть 3 свойства: Hidden, Directed и ModificationDateTime.
- ищите границу между точкой А и точкой Б.
- если такое ребро существует и его ModificationDateTime больше заданного нами «ignoreIfAboveDateTime», ничего не делайте.
- в противном случае, если такое ребро существует и ModificationDAteTime меньше), обновите его свойства.
- иначе, если он не существует, создайте его с заданным идентификатором и добавьте свойства.
конечно, если есть лучший способ сделать то, что я пытался, я хотел бы знать и сделать его красивее!
Я должен упомянуть, что я добавляю несколько ребер с одними и теми же запросами, что означает, что следующий запрос добавляется сам к себе (без начального «g») для каждого созданного ребра.
`
g
.V(`${pointA}`) // find the vertex with the given ID
.bothE(`${label}`) // find all edges with the given label
.where(__.otherV().hasId(`${pointB}`)) // find the edge with the given label that point to the given vertex
.fold()
.coalesce(
__.unfold().where(__.values('ModificationDateTime').is(gt(`${ignoreIfAboveDateTime}`))), // if there is an edge with the given label that points to the given vertex, and the edge's ModificationDateTime is greater than the given ignoreIfAboveDateTime, then do nothing
__.coalesce(
__.unfold(), // the edge exists, so it will only be updated
__.V(`${pointA}`).addE(`${label}`).to(__.V(`${pointB}`)).property(id, `${id}`) // the edge doesn't exist, so it will be created
)
.property('Hidden', `${hidden}`)
.property('Directed', `${directed}`)
.property('ModificationDateTime', `${modificationDateTime}`)
)
`
При получении ребер результаты (для одного ребра):{ id:'82c27123-b690-296d-2266-24f377334c13' inV: v[056a3511-45ca-4e7c-838c-b144598ae0e54294967296] label: 'EdgesTestLabel123' outV: v[87fc214b-7066-460e-8660-c0ef19344a6b4294967296] properties: {} }
Буду признателен за любой совет по этому поводу, спасибо! :)
1 ответ
я сделал глупость
Он отлично работает, я просто предположил, что возвращаемые «свойства» являются фактическими свойствами края, но это не так. когда я получил края с помощью valueMap(), все было там, да ладно