Не удается добавить свойства края в 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(), все было там, да ладно

Другие вопросы по тегам