【问题标题】:Selective unfolding of values from Gremlin (Neptune)来自 Gremlin(海王星)的值的选择性展开
【发布时间】:2020-06-05 05:33:56
【问题描述】:

我有一个顶点,比如说:

Vertex vertex = g.addV("person")
                .property("name", "x")
                .property(VertexProperty.Cardinality.list, "email", "x@yahoo.com")
                .property(VertexProperty.Cardinality.list, "email", "x@gmail.com")
                .next();

我正在使用以下方式从顶点获取值:

g.V(vertex).valueMap(true).by(unfold()).next();

我明白了:

{id=f862aa64-70d3-4c85-9bd0-1c938fdc2dc8, label=person, name=x, email=x@yahoo.com}

我希望提取属性 email 的所有值,因此我不希望仅将 deploy() 应用于该属性,如何添加此条件?

另外,我希望在一个查询本身中执行此操作。

【问题讨论】:

    标签: java gremlin tinkerpop3 amazon-neptune


    【解决方案1】:

    您可以通过unfoldvalueMap 的数量值:

    g.V().valueMap().by(choose(
          count(local).is(eq(1)),
          unfold()
          identity()
        ))
    

    示例:https://gremlify.com/bpy7apfj4yncr

    或者你可以使用简单的project:

    g.V().project('name', 'email').
        by(values('name')).
        by(values('email').fold())
    

    示例:https://gremlify.com/bqatjfi3rmrmt

    【讨论】:

    • 所以,第一个解决方案的问题是,如果只有一个电子邮件,它就会展开,而使用第二个解决方案,我将不得不明确命名所有属性。
    • 我知道我不能在 by() 中应用 values(),因为它是一个 valueMap,有什么方法可以选择应用折叠的属性吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多