Как сворачивание влияет на вывод JSON с сервера gremlin? Когда я разворачиваю и складываю содержимое пути, я получаю другую структуру данных, она добавляет свойства ребра и вершины. Хотя это моя цель - получить свойства в пути, но это кажется странным поведением, и я не смог найти об этой функции в документации.
Так почему это происходит?
g.V('1').out().path()
g.V('1').out().path().by(unfold().fold())
Когда я запускаю следующий запрос: g.V('1').out().path()
{
...
{
"@type": "g:Path",
"@value": {
"labels": {
"@type": "g:List",
"@value": [
{
"@type": "g:Set",
"@value": []
},
{
"@type": "g:Set",
"@value": []
}
]
},
"objects": {
"@type": "g:List",
"@value": [
{
"@type": "g:Vertex",
"@value": {
"id": "1",
"label": "USER"
}
},
{
"@type": "g:Vertex",
"@value": {
"id": "2",
"label": "USER"
}
}
]
}
}
}
...
}
Но когда я g.V('1').out().path().by(unfold().fold())
{
...
{
"@type": "g:Path",
"@value": {
"labels": {
"@type": "g:List",
"@value": [
{
"@type": "g:Set",
"@value": []
},
{
"@type": "g:Set",
"@value": []
}
]
},
"objects": {
"@type": "g:List",
"@value": [
{
"@type": "g:List",
"@value": [
{
"@type": "g:Vertex",
"@value": {
"id": "1",
"label": "USER",
"properties": {
"prop1": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": 101839172
},
"value": {
"@type": "g:Int32",
"@value": 1
},
"label": "prop1"
}
}
],
"created_at": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": 589742877
},
"value": {
"@type": "g:Date",
"@value": 1557226436119
},
"label": "created_at"
}
}
]
}
}
}
]
},
{
"@type": "g:List",
"@value": [
{
"@type": "g:Vertex",
"@value": {
"id": "2",
"label": "USER",
"properties": {
"prop1": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": -1354828672
},
"value": {
"@type": "g:Date",
"@value": 1557225020168
},
"label": "prop1"
}
}
],
"created_at": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": 589742878
},
"value": {
"@type": "g:Date",
"@value": 1557226436119
},
"label": "created_at"
}
}
]
}
}
}
]
}
]
}
}
}
...
}
РЕДАКТИРОВАТЬ: Дополнительная информация. Я обнаружил, что в дополнение к fold()
я могу получить всю сущность со свойствами, используя project()
и identity()
.
Поэтому, когда я запускаю g.V('1').out().path().by(identity())
, я получаю следующее содержимое Пути, такое же, как и в первом запросе.
"objects": {
"@type": "g:List",
"@value": [
{
"@type": "g:Vertex",
"@value": {
"id": "1",
"label": "USER"
}
},
{
"@type": "g:Vertex",
"@value": {
"id": "2",
"label": "USER"
}
}
]
}
Но когда я запускаю g.V('1').out().path().by(project('identity').by(identity()))
, в пути я получаю следующее (обратите внимание на объект свойств):
"objects": {
"@type": "g:List",
"@value": [
{
"@type": "g:Map",
"@value": [
"identity",
{
"@type": "g:Vertex",
"@value": {
"id": "1",
"label": "USER",
"properties": {
"prop1": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": 101839172
},
"value": {
"@type": "g:Int32",
"@value": 1
},
"label": "prop1"
}
}
],
"created_at": [
{
"@type": "g:VertexProperty",
"@value": {
"id": {
"@type": "g:Int32",
"@value": 589742877
},
"value": {
"@type": "g:Date",
"@value": 1557226436119
},
"label": "created_at"
}
}
],
}
}
}
]
}
unfold()
не нужен, это шагfold()
, который в основном добавляет свойства ребрам и вершинам. Полагаю, это ненормальное поведение Гремлина? Есть ли способ получить всю вершину / ребро, не выполняяfold()
? - person Vasar   schedule 09.05.2019