gremlin - 使用 Gremlin 将属性和元属性提取为类似 JSON 的结构

标签 gremlin tinkerpop

我的客户顶点有 4 个属性和 2 个元属性(每个属性都包含一个列表)。任务是以 JSON 结构返回客户数据。我能够提出这个查询:

g.V('customerId')
    .project('customer', 'addresses', 'accounts')
    .by(properties().not(hasLabel('addresses', 'accounts')).group().by(key()).by(value()))
    .by(properties('addresses').valueMap().fold())
    .by(properties('accounts').valueMap().fold())

产生结果

{
  "customer": {
    "firstName": "Carl",
    "middleName": "Friedrich",
    "lastName": "Gauss",
    "age": 77
  },
  "addresses": [
    {
      "streetName": "View",
      "streetNumber": "43",
    },
    {
      "streetName": "Market",
      "streetNumber": "11",
    }
  ],
  "accounts": [
    {
      "accountNumber": "1234"
    },
    {
      "accountNumber": "4321"
    }
  ]
}

我真正需要的是这样的结构:

{
  "firstName": "Carl",
  "middleName": "Friedrich",
  "lastName": "Gauss",
  "age": 77,
  "addresses": [
    {
      "streetName": "View",
      "streetNumber": "43",
    },
    {
      "streetName": "Market",
      "streetNumber": "11",
    }
  ],
  "accounts": [
    {
      "accountNumber": "1234"
    },
    {
      "accountNumber": "4321"
    }
  ]
}

我能得到的最接近的是这个查询:

g.V('customerId')
    .properties()
    .group()
    .by(key)
    .by(choose(hasLabel('addresses','accounts'), valueMap().fold(), value()))

不幸的是,它对地址和帐户内容进行了分组,因此我实际上只能看到最后一个地址/帐户:

{
  "firstName": "Carl",
  "middleName": "Friedrich",
  "lastName": "Gauss",
  "age": 77,
  "addresses": [
    {
      "streetName": "Market",
      "streetNumber": "11",
    }
  ],
  "accounts": [
    {
      "accountNumber": "4321"
    }
  ]
}

有没有办法列出所有元属性元素?

最佳答案

对于上面的例子,

如果添加fold().unfold(),它将考虑所有属性:

g.V('c81e3753-1eaa-453b-85bc-818174de70c1')
    .properties()
    .group()
    .by(key)
    .by(fold().unfold().choose(hasLabel('addresses','accounts'), value().fold(), value()))

关于gremlin - 使用 Gremlin 将属性和元属性提取为类似 JSON 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354505/

相关文章:

gremlin - 如何在janusgraph中的顶点上设置所需的属性值?

灯泡对象初始化方法中 fget 参数的 Python 灯泡框架示例

Gremlin 按最大属性过滤

java - gremlin中的Join查询,分组结果形成一对多关系

python - 在 python 中构造 janusgraph 的 get 查询

javascript - gremlin-javascript 中的纯文本 SASL 身份验证

gremlin - 如何列出gremlin中的所有分区?

graph - Gremlin:你如何找到没有特定边的顶点?

amazon-web-services - 用于获取具有最短距离的所有相关顶点的最佳海王星查询

graph - 在 gremlin 中,如何通过投影进行过滤?