cosmosdb:分组方式+联接

vcirk6k6  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(413)

无法将分组数据连接到源数据。使用关系型sql很容易做到这一点,但是花了很多时间尝试使用cosmosdb sql api来实现这一点,却没有成功。如有任何建议,将不胜感激!
以下是源文档:

[
   {
      "stream":{
         "id":"L1",
         "version":1,
         "versionName":"abc1"
      }
   },
   {
      "stream":{
         "id":"L1",
         "version":2,
         "versionName":"abc2"
      }
   },
   {
      "stream":{
         "id":"L2",
         "version":1,
         "versionName":"xyz1"
      }
   },
   {
      "stream":{
         "id":"L2",
         "version":2,
         "versionName":"xyz2"
      }
   },
   {
      "stream":{
         "id":"L2",
         "version":3,
         "versionName":"xyz3"
      }
   }
]

目标如下(按id分组):

[
   {
      "id":"L1",
      "versions":[
         {
            "version":1,
            "versionName":"abc1"
         },
         {
            "version":2,
            "versionName":"abc2"
         }
      ]
   },
   {
      "id":"L2",
      "versions":[
         {
            "version":1,
            "versionName":"xyz1"
         },
         {
            "version":2,
            "versionName":"xyz2"
         },
         {
            "version":3,
            "versionName":"xyz3"
         }
      ]
   }
]

我想知道这是可以做到的,还是只能在返回查询结果后在javascript中连接在一起?

4dbbbstv

4dbbbstv1#

我想知道这是可以做到的,还是只能在返回查询结果后在javascript中连接在一起?
恐怕这在cosmos数据库中是不支持的。无sql数据库的sql与关系数据库的sql有很大的不同。将数据聚合到一个数组不是任何一种聚合方法,这意味着它不能与 group by .

加入也是不同的。它在cosmosdb中用于连接嵌套数组,而不是连接水平数据。
所以,我认为这可以用代码实现,用 order by id ,然后循环结果以完成目标。

相关问题