【问题标题】:Alias of an object key using COSMOSDB sql query使用 COSMOSDB sql 查询的对象键的别名
【发布时间】:2023-03-28 08:44:01
【问题描述】:

我正在使用 Cosmos DB,我想编写一个 SQL 查询来返回文档对象中键的不同名称。

为了详细说明,假设您在一个容器中有以下文档,其中“make”对象中的“makeName”键。

{ 
   "vehicleDetailId":"38CBEAF7-5858-4EED-8978-E220D2BA745E",
   "type":"Vehicle",
   "vehicleDetail":{ 
      "make":{ 
         "Id":"B57ADAAD-C16E-44F9-A05B-AAB3BF7068B9",
         "makeName":"BMW"
      }
   }
}

我想编写一个查询来显示“vehicleMake”键来代替“makeName”。 如何在嵌套对象属性中赋予别名。

输出应该如下所示

{ 
   "vehicleDetailId":"38CBEAF7-5858-4EED-8978-E220D2BA745E",
   "type":"Vehicle",
   "vehicleDetail":{ 
      "make":{ 
         "Id":"B57ADAAD-C16E-44F9-A05B-AAB3BF7068B9",
         "vehicleMake":"BMW"
      }
   }
}

我不知道如何在 Cosmosdb 中查询得到上述结果。

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    属性的别名类似于在 SQL Server 中创建列别名的方式,使用 as 关键字。在您的示例中,它将是:

    SELECT c.vehicleDetail.make.makeName as vehicleMake
    FROM c
    

    这将返回:

    [
      {
        "vehicleMake": "BMW"
      }
    ]
    

    【讨论】:

    • 我需要在 make 对象中显示 vehicleMake 属性。我尝试了以下查询,但没有得到预期的正确输出。 SELECT c.vehicleDetailId ,c.type ,c.vehicleDetail ,c.vehicleDetail.make.Id as vehicleMake FROM c 知道如何编写查询以显示请求的输出
    【解决方案2】:

    试试这个:

    SELECT c.vehicleDetailId, c.type, 
    {"make":{"Id":c.vehicleDetail.make.Id, "vehicleMake":c.vehicleDetail.make.makeName}} as vehicleDetail 
    FROM c
    

    它使用以下文档中描述的别名。我可以在文档或博客文章中找到的所有别名示例仅显示单级 json 输出,但碰巧您可以将对象 (make) 嵌套在对象 (vehichleDetail) 中以获得所需的行为。

    https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-aliasing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2020-05-04
      相关资源
      最近更新 更多