azure JSON文件中不同向量内部的DISTINCT值

yr9zkbsy  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(99)

例如下面的JSON文件:

[
   {
        "id": "document1",
        "source": {
            "pass": {
                "ploy": {
                    "school": [{
                            "sourcen": "data"
                        },
                        {
                            "sourcen": "data1"
                        },
                        {
                            "sourcen": "data1"
                        }
                    ]
                }
            }
        }
    },
    {
        "id": "document2",
        "source": {
            "pass": {
                "ploy": {
                    "school": [{
                            "sourcen": "data1"
                        },
                        {
                            "sourcen": "data2"
                        },
                        {
                            "sourcen": "data3"
                        },
                        {
                            "sourcen": "data3"
                        }
                    ]
                }
            }
        }
    }
]

我想在“学校”向量中区分,所以输出将是:

[
  {
   "$1": [
     "data",
     "data1"
    ]
},
  {
  "$1": [
    "data1",
    "data2",
    "data3"
      ]
  }
]

在CosmosDB中,可以使用ARRAY()函数来检索此数据,但我使用的应用程序不支持它。
我现在正在运行下面的查询,但这是不正确的,因为它不同于所有值:SELECT DISTINCT sourcen FROM [tablename.source.pass.ploy.school]
是否有任何SQL查询从不同的向量输出不同的数据?

pftdvrlh

pftdvrlh1#

您可以按照“sourcen”字段中的值对数据进行分组,然后使用STRING_AGG()连接每个组的不同值。

SELECT STRING_AGG(DISTINCT s, ',') AS $1
FROM c
JOIN s IN c.source.pass.ploy.school
GROUP BY s.sourcen
pbpqsu0x

pbpqsu0x2#

我不知道你的意思是“但我使用的应用程序不支持它。”查询进去,单据出来;您的应用程序不应该关心查询在CosmosDB服务器中是如何执行的,而应该接受任何有效的SQL查询。
难道是你的客户端应用程序只是无法绑定那些自动名称,如$1
基本上,你可以DISTINCT子查询与ARRAY()函数结合,并为构造的部分提供显式名称,如下所示:

SELECT c.id,
    ARRAY (select distinct value p.sourcen 
        from p in c.source.pass.ploy.school
    ) as sourcen
FROM c

生成以下文档:

[
    {
        "id": "test",
        "sourcen": [
            "data",
            "data1"
        ]
    }
]

这里有一些关于如何在cosmosDB SQL查询中使用数组的文档,包括如何在Working with arrays and objects in Azure Cosmos DB中构造数组。

相关问题