MongoDB- 如何从对象中 $project 项目?

MongoDB- How to $project items from an object?

游乐场 https://mongoplayground.net/p/tIMLOtWTnno

数据:

[

  {
    "_id": "1",
    "data": {                     // How to remove this "data" Field
      "colour": "Blue",
      "size": "12",
    }
  },
  {
    "_id": "2",
    "data": {                     // How to remove this "data" Field
      "colour": "Silver",
      "size": "20",
    }
  }

]

我想删除 data 字段。

预期输出:

[
  {
    "_id": "1",
    "colour": "Blue",
    "size": "12",
    
  },
  {
    "_id": "2",
    "colour": "Silver",
    "size": "20",
    
  }
]

这样试过:

db.collection.aggregate({
  $project: {
    _id: 1,
    data: {
      $objectToArray: "$data"
    }
  },
  
},
{
  $unwind: "$data"
},
{
  $project: {
    "$data.k": "$data.v"
  }
})

怎么做?

查询 1

  • 设置在根中添加字段并删除数据

*您也可以使用项目

Test code here

aggregate(
[{"$set":
  {"colour":"$data.colour",
   "size":"$data.size",
   "data":"$$REMOVE"}}])

查询2

  • 更通用的解决方案,无需在项目中键入每个字段
  • 将数据嵌入对象与根合并,使其成为新的根
  • 删除数据字段

Test code here

aggregate(
[{"$replaceRoot":{"newRoot":{"$mergeObjects":["$data", "$$ROOT"]}}},
 {"$project":{"data":0}}])