Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
展平嵌套JSON结构并在mongoDB聚合中追加属性名_Mongodb_Aggregate - Fatal编程技术网

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

展平嵌套JSON结构并在mongoDB聚合中追加属性名,mongodb,aggregate,Mongodb,Aggregate,我有一个这样的物体 { "testing": { "total": 360, "status": "testing", "books": [ { "book": "john goes to school", "authors": [

我有一个这样的物体

{
    "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和$REDUCT的组合,但不确定如何理解它。基本上,我一直在尝试展平数组,并将状态附加到每条记录中 如果您有任何帮助,我们将不胜感激,谢谢您尝试此聚合-

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 3的$set stage等价物是多少?感谢bunchTry$addFields而不是$set