У меня есть вершина, у которой есть свойство списка, и я хочу заменить значения в указанном свойстве и спроецировать результат в определенном формате. Для контекста предположим следующие данные:
g.AddV("Post").property("id", "1")
.property(list, "Tags", "gremlin")
.property(list, "Tags", "new")
Я хочу иметь возможность установить свойство Tags
. Что я пробовал до сих пор:
g.V("1")
.sideEffect( properties("Tags").drop() )
.property(list, "Tags", "gremlin")
.property(list, "Tags", "closed")
.property(list, "Tags", "solved")
.project("Tags").By(values("Tags"))
Я ожидал следующего
{
"Tags": [
"gremlin",
"closed",
"solved",
]
}
Но вместо этого я получаю сообщение об ошибке Project By: Next: The provided traverser of key "Tags" maps to nothing.
Таким образом, похоже, что свойство Tags
было полностью удалено. Если я сделаю запрос позже
g.V("1").project("Tags").By(values("Tags"))
Получаю ожидаемый результат:
{
"Tags": [
"gremlin",
"closed",
"solved",
]
}
Значит, данные должны быть изменены. Если я попробую без проецирования, результат будет содержать новые значения.
g.V("1")
.sideEffect( properties("Tags").drop() )
.property(list, "Tags", "gremlin")
.property(list, "Tags", "closed")
.property(list, "Tags", "solved")
В результате чего:
{
"id": "1",
"label": "Post",
"type": "vertex",
"properties": {
"Tags": [
{
"id": "4eaf5599-511c-4245-aaf8-15c828073fac",
"value": "gremlin"
},
{
"id": "75e3ad96-a503-4608-a675-e28f3ffc2ab4",
"value": "closed"
},
{
"id": "aea1a33c-bd8e-47bb-b294-f01db8642db5",
"value": "solved"
},
]
}
}
Но это оставляет меня неспособным спрогнозировать результат.
Как я могу одновременно обновлять данные и проецировать их?
Другие вещи, которые я пробовал:
- Добавление
barrier()
шага послеdrop()
шага не помогло - Добавление
barrier()
шага послеsideEffect()
шага не помогло - Добавление шага
barrier()
перед шагомproject()
не помогло - То же, что и три выше, но с
.fold().unfold()
вместо этого не сработало - Замена шага
project()
наoptional(g.V("1").project("Tags").by(values("Tags")))
- этот шаг работает путем повторной выборки вершины, но стоит дорого.