【问题标题】:How do I retrieve multiple multi-properties in Gremlin?如何在 Gremlin 中检索多个多属性?
【发布时间】:2020-12-29 23:07:09
【问题描述】:

我有一个 Person 对象,我正在将其写入如下图:

gts.addV(newId).label('Person')
  .property(single, 'name', 'Alice')
  .property(set, 'email', 'alice1@example.invalid')
  .property(set, 'email', 'alice2@example.invalid')

现在我想检索顶点的内容。如文档所述,elementMap 不起作用,因为它只为多属性返回一个属性值。我尝试了values('name', 'email'),但它返回了扁平列表中的所有属性,而不是我期望的嵌套结构:

['Alice', 'alice2@example.invalid', 'alice1@example.invalid']

我尝试了 valuesprojectas/select 的各种组合,但我总是得到一个空结果、一个平面列表或多属性上的单个值。

我如何查询一个顶点,以便得到类似这样的结果?

['Alice', ['alice2@example.invalid', 'alice1@example.invalid']]

[name:'Alice', email:['alice2@example.invalid', 'alice1@example.invalid']]

【问题讨论】:

    标签: java gremlin


    【解决方案1】:

    如果您只是想返回值的映射,您可以使用valueMap() step

    g.V(newId).valueMap('name', 'email')

    将返回:

    [name:[Alice],email:[alice1@example.invalid,alice2@example.invalid]]

    如果您只想返回值,可以通过添加select(values)

    g.V().valueMap('name', 'email').select(values)

    返回

    [[Alice],[alice1@example.invalid,alice2@example.invalid]]

    【讨论】:

    • 这可能就是我要找的。你能澄清你的select(values) 建议吗?不知道values是什么标识符,select(__.values())好像会触发异常。
    • 这里引用的valuesColumn.values 枚举的一部分,它告诉遍历返回值部分或映射。这也可以写成g.V().valueMap('name', 'email').select(Column.values) 这是列枚举文档的链接:tinkerpop.apache.org/javadocs/current/full/org/apache/tinkerpop/…
    • 嗯。看来select(Column.values) 不保留顺序(除了省略未定义的属性),所以我会坚持使用地图返回版本。感谢您的帮助。
    • 因此,这将仅返回 valueMap() 步骤输出的地图中的值。它应该只包含该步骤中包含的属性。就订单而言,它似乎从 Gremlin 服务器中保留了它们,但 TinkerPop 通常不保证返回订单值,只是它会按照服务器发送它的顺序返回它们。如果要保证顺序,则需要通过映射中的键对每一行进行排序g.V().valueMap('name', 'email').order(local).by(select(Column.keys)).select(Column.values)
    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多