获取gremlin查询的部分树()

问题描述 投票:0回答:2

我正在针对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": {...}
      }
    }
  }
}
azure graph azure-cosmosdb gremlin
2个回答
1
投票

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

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

0
投票

根据我到目前为止所学到的关于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

© www.soinside.com 2019 - 2024. All rights reserved.