mongoose 将mongoDB中的嵌入文档移动到新文档中

xqkwcwgp  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(165)
{
  "_id": {
    "$oid": "2534c6893d643531411"
  },
  "id": "854",
  "920543": {
    "createdAt": 1667210991769,
  },
  "750544": {
    "createdAt": 1693292609,
  },
  "719572": {
    "createdAt": 1693292739,
}

我尝试遍历集合中的每个文档,并移动文档中所有嵌入的文档,并为每个嵌入的文档创建一个新文档,其中键如750544,719572作为新id中的messageId字段,其余数据如createdAt作为普通字段。我还希望在新文档中保持id字段不变。
基于上述内容的示例文档如下所示:

{
  "_id": {
    "$oid": "someIdGeneratedbyMongo"
  },
  "id": "854",
  "messageId": "920543",
  "createdAt": 1667210991769
},
{
  "_id": {
    "$oid": "someIdGeneratedbyMongo"
  },
  "id": "854",
  "messageId": "750544",
  "createdAt": 1693292609
},
{
  "_id": {
    "$oid": "someIdGeneratedbyMongo"
  },
  "id": "854",
  "messageId": "719572",
  "createdAt": 1693292739
}

cotxawn7

cotxawn71#

  1. $set-创建一个data数组字段,其值为将当前文档中的所有字段(不包括_idid字段)转换为具有kv字段的文档。
  2. $unwind-解构data数组字段。
  3. $project-修饰输出文档。
db.collection.aggregate([
  {
    $set: {
      data: {
        $filter: {
          input: {
            $objectToArray: "$$ROOT"
          },
          cond: {
            $not: {
              $in: [
                "$$this.k",
                [
                  "_id",
                  "id"
                ]
              ]
            }
          }
        }
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    $project: {
      id: 1,
      messageId: "$data.k",
      createdAt: "$data.v.createdAt"
    }
  }
])

Demo @ Mongo Playground

相关问题