微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Gremlin 查询中将项目结果转换为单个列表

如何解决在 Gremlin 查询中将项目结果转换为单个列表

我有一个 gremlin 查询,我想返回一组用户 ID。目前它正在返回一个数组数组。每个投影一个数组。

有没有办法将这个数组数组转换为查询中的单个用户 ID 数组,或者这是我需要在应用程序级别处理的事情?

非常感谢任何帮助。

g.V('testUser').fold()
.coalesce(
    unfold().project('bi_directional_connection','single_directional_connection')
            .by(
                bothE('bi_directional_connection')
                    .has('status','ACCEPTED')
                    .otherV()
                    .has('active',true)
                    .values('user_id')
                    .fold()
                    .dedup()
                    .limit(100)
            )
            .by(
                outE('single_directional_connection')
                    .otherV()
                    .values('user_id')
                    .fold()
                    .dedup()
                    .limit(100)

            ).select(values),project('err').by(constant("user does not exist"))
)

编辑: 这是我的示例数据

    // Set up test data
g.addV('joshTest1')
    .property(T.id,'joshTest1')
    .property(single,'user_id','role','test-user')
    .property(single,'active',true)
.addV('joshTest2')
    .property(T.id,'joshTest2')
    .property(single,true)
.addV('joshTest3')
    .property(T.id,'joshTest3')
    .property(single,true)
.addV('joshTest4')
    .property(T.id,'joshTest4')
    .property(single,true)
.addE('single_directional_connection')
    .from(V('joshTest2'))
    .to(V('joshTest1'))
    .property('status','ACCEPTED')
.addE('single_directional_connection')
    .from(V('joshTest3'))
    .to(V('joshTest1'))
    .property('status','ACCEPTED')
.addE('bi_directional_connection')
    .from(V('joshTest2'))
    .to(V('joshTest3'))
    .property('status','ACCEPTED')
.addE('bi_directional_connection')
    .from(V('joshTest3'))
    .to(V('joshTest2'))
    .property('status','ACCEPTED')
.addE('bi_directional_connection')
    .from(V('joshTest2'))
    .to(V('joshTest4'))
    .property('status','ACCEPTED')
.addE('bi_directional_connection')
    .from(V('joshTest4'))
    .to(V('joshTest2'))
    .property('status','ACCEPTED')

这是我通过对示例数据运行查询得到的响应。我正在 AWS Jupyter 笔记本中执行此操作。

[['joshTest3','joshTest4','joshTest3','joshTest4'],['joshTest1']]

请注意,我也收到了我不想要的重复项。

我想得到的是:

['joshTest3','joshTest1']

解决方法

这是一个让你前进的答案。我在 dedup 之前移动了 fold 并在最后调整了结果。我将进一步研究这个查询,如果我想出一个更简单的查询作为选项,我会更新这个答案。

g.V('joshTest2').fold()
.coalesce(
    unfold().project('bi_directional_connection','single_directional_connection')
            .by(
                bothE('bi_directional_connection')
                    .has('status','ACCEPTED')
                    .otherV()
                    .has('active',true)
                    .values('user_id')
                    .dedup()
                    .fold()
                    .limit(100)
            )
            .by(
                outE('single_directional_connection')
                    .otherV()
                    .values('user_id')
                    .dedup()
                    .fold()
                    .limit(100)

            ).select(values)
             .unfold()
             .unfold()
             .fold(),project('err').by(constant("user does not exist"))
)

这产生了

['joshTest3','joshTest4','joshTest1']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。