微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

展平嵌套的JSON结构并在mongoDB聚合中追加属性名称

如何解决展平嵌套的JSON结构并在mongoDB聚合中追加属性名称

我有一个这样的物体

{
    "testing": {
      "total": 360,"status": "testing","books": [
        {
          "book": "john goes to school","authors": [
            "john@gmail.com"
          ]
        }
      ],},"dev": {
      "total": 863,"status": "dev","books": [
        {
          "book": "bob makes a book","authors": [
            "bob@gmail.com",]
        }
      ]
    },"prod": {
      "total": 1,"status": "prod","flags": [
        {
          "book": "nancy writes an essay","authors": [
            "nancy@gmail.com"
          ]
        }
      ]
    }
  }
]

我想把它展平成这样:

{
   "books":[
      {
         "book":"john goes to school","authors":[
            "john@gmail.com"
         ],"status":"testing"
      },{
         "book":"bob makes a book","authors":[
            "bob@gmail.com"
         ],"status":"dev"
      },{
         "book":"nancy writes an essay","authors":[
            "nancy@gmail.com"
         ],"status":"prod"
      }
   ]
}

到目前为止,我要使它看起来最接近的最好方法就是使用它

db.collection.aggregate([
  {
    $project: {
      _id: 0,dev: "$dev.books",test: "$test.books",prod: "$prod.books"
    }
  }

我尝试使用$ unwind,$ map和$ reduce的组合,但不确定如何理解它。基本上,我一直在尝试展平数组,并将状态附加到每个记录 任何帮助将不胜感激,谢谢

解决方法

尝试此汇总-

db.collection.aggregate([
  {
    "$match": {
      "_id": 0
    }
  },{
    "$project": {
      "_id": 0
    }
  },{
    "$project": {
      "arr": {
        "$objectToArray": "$$ROOT"
      }
    }
  },{
    "$unwind": "$arr"
  },{
    "$set": {
      "arr.v.books.status": "$arr.v.status"
    }
  },{
    "$group": {
      "_id": "$_id","books": {
        "$addToSet": "$arr.v.books"
      }
    }
  }
])

这里是Mongo Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。