通过另一个顶点查询顶点[GREMLIN]

时间:2020-04-16 07:07:24

标签: gremlin graph-databases azure-cosmosdb-gremlinapi

graph database

上面的图像是我的图形的样子,我想查询以下输出:

[
    {
        chart:{
            name: 'chart1',
            id: 'chart1',
            label: 'chart',
            pk: 'chart1',
        },
        variables: [
            {
                variable: {
                    name:'variable1'
                    id: 'variable1',
                    label: 'variable',
                    pk: 'variable1',
                },
                years: [
                    {
                        name:'year1'
                        id: 'year1',
                        label: 'year',
                        pk: 'year1',
                    },
                    {
                        name:'year2'
                        id: 'year2',
                        label: 'year',
                        pk: 'year2',
                    },
                ],
            },
            {
                variable: {
                    name:'variable2'
                    id: 'variable2',
                    label: 'variable',
                    pk: 'variable2',
                },
                years: [
                    {
                        name:'year3'
                        id: 'year3',
                        label: 'year',
                        pk: 'year3',
                    },
                ],
            }
        ],
    },
    {
        chart:{
            name: 'chart2',
            id: 'chart2',
            label: 'chart',
            pk: 'chart2',
        },
        variables: [
            {
                variable: {
                    name:'variable2'
                    id: 'variable2',
                    label: 'variable',
                    pk: 'variable2',
                },
                years: [
                    {
                        name:'year4'
                        id: 'year4',
                        label: 'year',
                        pk: 'year4',
                    },
                ],
            },
        ],
    }
]

但是使用我当前的查询:

g
.V()
.hasLabel('chart')
.project('chart', 'variables')
.by(valueMap(true))
.by(
    out('visualizes')
    .hasLabel('year')
    .out('outputs')
    .hasLabel('variable')
    .project('variable', 'years')
    .by(
        valueMap(true).fold()
    )
    .by(
        __.in('outputs')
        .hasLabel('year')
        .valueMap(true)
        .fold()
    )
    .fold()
)

这就是我得到的:

[
    {
        chart: {
            id: 'chart1',
            label: 'chart',
            name: 'chart1',
            pk: 'chart1',
        },
        variables: [
            {
                variable: [
                    {
                        id: 'variable1',
                        label: variable,
                        name: 'variable1',
                        pk: 'variable1'
                    }
                ],
                years: [
                    {
                        id: 'year1',
                        label: 'year',
                        name: 'year1',
                        pk: 'year1',
                    },
                    {
                        id: 'year2',
                        label: "year",
                        name: 'year2',
                        pk: 'year2'
                    },
                ]
            },
            {
                variable: [
                    {
                        id: 'variable1',
                        label: 'variable',
                        name: 'variable1',
                        'pk': 'variable1'
                    }
                ],
                years: [
                    {
                        id: 'year1',
                        label: 'year',
                        name: 'year1',
                        pk: 'year1'
                    },
                    {
                        id: 'year2',
                        label: 'year',
                        name: 'year2',
                        pk: 'year2'
                    }
                ]
            },
            {
                variable: [
                    {
                        id: 'variable2',
                        label: "variable",
                        name: 'variable2',
                        pk: 'variable2'
                    }
                ],
                years: [
                    {
                        id: 'year3',
                        label: 'year',
                        name: 'year3',
                        pk: 'year3',
                    },
                    {
                        id: 'year4',
                        label: "year",
                        name: 'year4',
                        pk: 'year4'
                    }
                ]
            }
        ]
    },
    {
        chart: {
            id: 'chart2',
            label: 'chart',
            name: 'chart2',
            pk: 'chart2'
        },
        variables: [
            {
                variable: [
                    {
                        id: 'variable2',
                        label: 'variable',
                        name: 'variable2',
                        pk: 'variable2'
                    }
                ],
                years: [
                    {
                        id: 'year3',
                        label: 'year',
                        name: 'year3',
                        pk: 'year3'
                    },
                    {
                        id: 'year4',
                        label: 'year',
                        name: 'year4',
                        pk: 'year4'
                    }
                ]
            }
        ]
    }
]
//this is the formatted version to be easily read. refer to this link for the actual json: https://pastebin.com/Y2ncHyPi 

从实际输出中可以看到,我的查询问题是chart1的重复项variable1chart2的变量具有year3,该变量来自{{1 }}。我是否需要更改图形的结构?还是我必须添加其他属性以供参考?请帮忙。

查询种子图:

chart1

PS:我正在使用Azure Cosmos DB的gremlin API。

1 个答案:

答案 0 :(得分:1)

我可以提出一种我不确定是最简单的解决方案,但可以解决这个问题:

g.V().hasLabel('chart').
  project('chart', 'variables').
    by(valueMap(true)).
    by(out('visualizes').
      hasLabel('year').as('y').
      out('outputs').
      group().by().
        by(select('y').fold()).unfold().
      project('variable', 'years').
        by(select(keys).
          valueMap(true)).
        by(select(values).unfold().
          valueMap(true).fold()).fold())

我在这里进行了测试: https://gremlify.com/6h

相关问题