【问题标题】:Merging maps in Gremlin在 Gremlin 中合并地图
【发布时间】:2020-02-19 18:48:31
【问题描述】:

我正在尝试编写满足响应对象中两个要求的单个查询:

  1. 必须包括顶点的所有属性,而不是在查询中指定单个字段。

  2. 必须在对象的同一级别上展平结果。

作为单独的查询,我可以这样做:

1。 valueMap查询

g.V(1)
.valueMap().by(unfold()).fold()

回复:

{
  "property1": "value1",
  "property2": "value2"
}

2。 project查询

g.V(1)
.project("projectedProperty")
.by(out("X").valueMap().by(unfold()).fold())

回复:

{
  "projectedProperty": "value",
}

组合查询

我尝试使用联合来组合这些结果:

g.V(1)
.union(
  valueMap().by(unfold()).fold(), // Query 1
  project("projectedField").by(out("X").valueMap().by(unfold()).fold()) // Query 2
).fold()

回复:

{
  [
    {
      "property1": "value1",
      "property2": "value2"
    },
    {
      "projectedProperty": "value"
    }
  ]
}

这种联合方法依赖于我在最后放置一个折叠,这反过来又不能正确合并/展平两个地图。预期响应是:

{
  "property1": "value1",
  "property2": "value2",
  "projectedProperty": "value"
}

有没有更好的方法来完成合并/展平响应对象中的两个地图的任务?

【问题讨论】:

    标签: gremlin


    【解决方案1】:

    典型的pattern 是将unfold() 映射到条目(键/值),然后group() 将它们重新组合为一个:

    gremlin> g.V().has('person','name','marko').
    ......1>   union(project('count').by(outE().count()), elementMap()).
    ......2>   unfold().
    ......3>   group().by(keys).by(select(values))
    ==>[count:3,name:marko,label:person,id:1,age:29]
    

    【讨论】:

    • 这行得通,谢谢。具体来说,我必须在联合之后附加unfold().group().by(keys).by(select(values))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2018-10-23
    • 2012-06-16
    • 1970-01-01
    • 2021-02-28
    • 2017-04-11
    相关资源
    最近更新 更多