获取gremlin查询的部分树()

时间:2017-12-04 18:09:55

标签: azure graph azure-cosmosdb gremlin

我在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": {...}
      }
    }
  }
}

2 个答案:

答案 0 :(得分:1)

unfold()树结果并选择值。这样你就可以摆脱根节点。

g.V().hasLabel('person').
  out('friends').
  optional(outE()).tree().
  unfold().
  select(values)

答案 1 :(得分:0)

根据我迄今为止所学到的关于gremlin的问题来回答我自己的问题,GraphSONMode.Normal可以解决问题。

虽然这是我到目前为止找到的唯一方法,它也适用于有嵌套/复杂投影的查询(例如project('parent').by(project('member').by(...))),但唯一的缺点是它返回了我只需要的输入和传出的调整列表外向的边缘。

我向uservoice发布了一条建议,要求对gremlin查询的输出格式进行细粒度控制,如果您想跟随请访问此链接: https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/32738743-add-more-options-for-graphsonmode