Gremlin на CosmosDB - удаление и воссоздание свойств вершины без удаления вершины - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь установить свойства для вершины в разбитом графике CosmosDB.Если у вершины были какие-либо свойства ранее, я хочу, чтобы они были очищены и заменены новым набором свойств.

Даже удаление было немного сложным, так как «ключ раздела» отображается как свойство, не подлежащее удалению.

g.V('nodeId').has('partitionKey','xx').properties().drop()

-> «Ошибка выполнения запроса Gremlin: свойство раздела не можетбыть удаленным. "

К счастью, id свойства ключа раздела предсказуемо и может использоваться для его фильтрации:

g.V('nodeId').has('partitionKey','xx')
.properties().not(has('id', 'nodeId|partitionKey'))
.drop()

Теперь я застрял, пытаясь добавитьновые свойства.Я попытался:

g.V('nodeId').has('partitionKey','xx')
.properties().not(has('id', 'nodeId|partitionKey'))
.drop()
.property('a','valA')
.property('b','valB')

, но похоже, что я применяю шаг property() к (пустому) списку свойств, а не к вершине.Ошибка не очень полезна:

Gremlin Query Compilation Error: Column reference R_200324["_value"] cannot be located in the raw records in the current execution pipeline.

Я пытался применить шаг property() к вершине (с помощью select), но я должен что-то делать неправильно:

g.V('nodeId').has('partitionKey','xx')
.as('v') 
.properties().not(has('id', 'nodeId|partitionKey'))
.drop()
.select('v')
.property('a','valA')
.property('b','valB')

Это дает ту же ошибку, что и выше.

Я также пробовал .back('v') вместо .select('v'), но похоже, что back не поддерживается в CosmosDB.

Какие-либо предложения?

1 Ответ

0 голосов
/ 12 февраля 2019

Я думаю, что вы столкнулись с той же проблемой, как описано в этом SO-ответе .

По сути, .drop() отфильтровывает все из обхода и предотвращает любой из следующего кодаделать что-либо.

Вы можете обойти это, используя .sideEffect() примерно так

g.V('nodeId').has('partitionKey','xx')
.sideEffect(properties().not(has('id', 'nodeId|partitionKey')).drop())
.property('a','valA')
.property('b','valB')
...