我正在针对Cosmos DB数据库运行此Gremlin查询。它返回每个人'p',其中存在朋友'f'并包括朋友'f'
g.V().hasLabel('person').as('p')
.out('friends').as('f')
.select('f')
.optional(outE()).tree()
实际结果是这样的
{ p1: { f1, .. }, p2: { f1, ... } }
但是我怎么才能得到朋友'f'和'f'的可选边缘?这样的事情:
{ f1, f2, ... }
GraphSON格式的实际结果部分:
{
"3": {
"key": {"id": "1",...},
"value": {
"2": {
"key": {
"id": "2",
"label": "person",
"type": "vertex"
},
"value": { ... }
}
}
},
"1": {
"key": {"id": "1", ... },
"value": {
"2": {
"key": {
"id": "2",
"label": "person",
"type": "vertex"
},
"value": {...}
}
}
}
}
unfold()
树结果并选择值。这样你就可以摆脱根节点。
g.V().hasLabel('person').
out('friends').
optional(outE()).tree().
unfold().
select(values)
根据我到目前为止所学到的关于gremlin的问题来回答我自己的问题,GraphSONMode.Normal
可以解决这个问题。
虽然这是我到目前为止找到的唯一方法,它也适用于具有嵌套/复杂投影的查询(例如project('parent').by(project('member').by(...))
),但唯一的缺点是它返回了incomming和传出的adjancy列表,其中我只需要传出边缘。
我向uservoice发布了一个建议,要对gremlin查询的输出格式进行细粒度控制,如果你想跟随请访问此链接:https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/32738743-add-more-options-for-graphsonmode