将嵌套子文档转换为单个文档MongoDB查询

6l7fqoea  于 2023-03-29  发布在  Go
关注(0)|答案(1)|浏览(126)

我正在模拟Firebase Realtime DB的RestFul API。因为在上传数据时没有遵循标准的数据结构。
我遇到了一个复杂的情况,我想将嵌套文档拆分为多个文档,以便使用mongo-query而不是服务器对其执行进一步的排序聚合。
下面是我使用$project提取的数据

{
  "data": {
    "8787879798": {
      "value": 89
    },
    "c5ca5ebd804b4b1aab82348a4070fa78": {
      "sample": 78
    },
    "88dc2f042c3e4aa3a2a2378e48444000": {
      "sample": 78
    },
    "7061e88f77754b6e94b3b2ed3bf7513f": {
      "sample": 78
    },
    "033f120577c443548d4cdc4425a7767f": {
      "sample": 78
    },
    "33fb18ba5e3d41c5a6b9b89433ab231d": {
      "sample": 78
    },
    "5f9c6d4bf0e3416b9b963dbf5d15021d": {
      "sample": 78
    }
  }
}

下面是查询

[
  {
    $project:
      /**
       * specifications: The fields to
       *   include or exclude.
       */
      {
        _id: 0,
        data: "$foo.bar.xyz",
      },
  },
]

我想得到这样的输出:
其中每个子文档都成为文档

{
    "8787879798": {
      "value": 89
    },
    "c5ca5ebd804b4b1aab82348a4070fa78": {
      "sample": 78
    },
    "88dc2f042c3e4aa3a2a2378e48444000": {
      "sample": 78
    },
    "7061e88f77754b6e94b3b2ed3bf7513f": {
      "sample": 78
    },
    "033f120577c443548d4cdc4425a7767f": {
      "sample": 78
    },
    "33fb18ba5e3d41c5a6b9b89433ab231d": {
      "sample": 78
    },
    "5f9c6d4bf0e3416b9b963dbf5d15021d": {
      "sample": 78
    }
  }
7kqas0il

7kqas0il1#

在流水线中使用$replaceRoot stage,如下所示:

db.collection.aggregate([
  {
    "$replaceRoot": {
      "newRoot": "$data"
    }
  }
])

Playground link.

相关问题