【问题标题】:Mongodb Aggregation How can i merge this subdocument of subdocument?Mongodb聚合如何合并这个子文档的子文档?
【发布时间】:2020-01-31 14:10:24
【问题描述】:

我想合并这些数据,这两个数据具有相同的根_id,并且视频字段具有相同的songs._id 值。最后,我想将这个具有相同 song._id 的视频数据合并到相同歌曲数据和相同根目录下的视频数组中,

[
  {
    "_id": ObjectId("5e328f15b7e4937f52c67679"),
    "name": "HoYoung",
    "like": 0,
    "view": 0,
    "songs": {
      "_id": "32f3156c-ed37-40dc-af96-dcbf53a84a58",
      "name": "testName",
      "lyrics": "testLyrics",
      "like": 0,
      "video": {
        "_id": "1255c77b-f3f6-466a-bd1a-0124555e5592",
        "like": 0,
        "view": 0
      }
    }
  },
  {
    "_id": ObjectId("5e328f15b7e4937f52c67679"),
    "name": "HoYoung",        
    "like": 0,
    "view": 0,        
    "songs": {
      "_id": "32f3156c-ed37-40dc-af96-dcbf53a84a58",
      "lyrics": "testLyrics",
      "like": 0,
      "name": "testName",
      "video": {
        "_id": "f08a433a-e120-459f-8bf1-1f55081dbf82",
        "like": 0,
        "view": 0
      }
    }
  }
]

   {
        "_id" : ObjectId("5e328f15b7e4937f52c67679"),
        "name" : "HoYoung",
        "like" : 0
        "songs" : {
            "_id" : "32f3156c-ed37-40dc-af96-dcbf53a84a58",
            "name" : "testName",
            "lyrics" : "testLyrics",
            "like" : 0,
            "view" : 0,
            "video" : [{
                "_id" : "1255c77b-f3f6-466a-bd1a-0124555e5592",
                "like" : 0,
                "view" : 0
            },{
                "_id" : "f08a433a-e120-459f-8bf1-1f55081dbf82",
                "like" : 0,
                "view" : 0
            }]
        }
    }

我该怎么做?团体?问题是我不能对子文档的子文档进行分组

【问题讨论】:

    标签: database mongodb nosql aggregation-framework


    【解决方案1】:

    您需要 $groupsongs._id (以及根 _id 在您的上下文中)并在临时 video 数组中累积 video 子文档(我们存储在 root 顶级文档中以进行合并下一阶段)。

    db.collection.aggregate([
      {
        $group: {
          _id: "$songs._id",
          root: {
            $first: "$$ROOT"
          },
          video: {
            $push: "$songs.video"
          }
        }
      },
      {
        $project: {
          name: "$root.name",
          like: "$root.like",
          songs: {
            _id: "$root.songs._id",
            name: "$root.songs.name",
            lyrics: "$root.songs.lyrics",
            like: "$root.songs.like",
            view: "$root.songs.view",
            video: "$video"
          }
        }
      }
    ])
    

    MongoPlayground

    【讨论】:

    • 哦,谢谢,我成功地将视频与相同的歌曲合并,那么,我如何将这两个数据与相同的 root._id 合并?我的意思是这些查询是将这两个视频与相同的歌曲合并。_id 我的意思是.. 组??我想要做的是与相同的 root._id 合并而不是歌曲._id...感谢您的帮助
    • @조호영 您是否尝试过提供的聚合?首先执行它,它完全符合您的预期
    猜你喜欢
    • 2015-04-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多