Форматирование CosmosDB Gremlin Query
Я новичок в Гремлин и CosmosDB. Я следовал инструкциям по tinkerpop и использую тестовый график TinkerFactory.createModern().
То, что я ищу, это вернуть объект graphson, подобный этому, из cosmosdb.
{
"user": {
"name": "Marko",
"age": 29
},
"knows": [
{"name": "josh", "age": 32},
{"name": "vadas", "age": 27}
],
"created": [
{"name": "lop", "lang": "java"}
]
}
Мои мысли должны были попробовать
g.V().has('name', 'marko').as('user').out('knows').as('knows').out('created').as('created').select('user', 'knows', 'created')
То, что я действительно получаю обратно, на картинке ниже. Я надеялся получить однопользовательский объект с массивом известных объектов и программных объектов.
Если это возможно, объясните, пожалуйста, какие шаги необходимо предпринять, чтобы получить этот формат.
Надеюсь, мой вопрос ясен и спасибо всем, кто может помочь =)
1 ответ
Вы должны использовать project()
:
gremlin> g.V().has('person','name','marko').
......1> project('user','knows','created').
......2> by(project('name','age').by('name').by('age')).
......3> by(out('knows').project('name','age').by('name').by('age')).
......4> by(out('created').project('name','lang').by('name').by('lang'))
==>[user:[name:marko,age:29],knows:[name:vadas,age:27],created:[name:lop,lang:java]]
Этот синтаксис должен работать с CosmosDB. В TinkerPop 3.4.0 все становится немного лучше, как вы можете использовать valueMap()
немного более эффективно (но я не думаю, что CosmosDB поддерживает это на момент ответа):
gremlin> g.V().has('person','name','marko').
......1> project('user','knows','created').
......2> by(valueMap('name','age').by(unfold())).
......3> by(out('knows').valueMap('name','age').by(unfold())).
......4> by(out('created').valueMap('name','lang').by(unfold()))
==>[user:[name:marko,age:29],knows:[name:vadas,age:27],created:[name:lop,lang:java]]