我怎样才能收集所有字段及其值,除了其中五个,并将它们放在同一个集合中的新字段中 mongoDB

How can I gather all fields with their values except five of them and put them inside new field in the same collection with mongoDB

我有一个集合,其中包含许多字段太多的文档,但我想在名为 Data 的新字段中收集许多这些字段,这是一个示例

{
 "_id" : ObjectId("***********"),
  "name" : "1234567890",
  "mobile" : "Test",
.
.
.
.
.
etc
}

我想使用 updateMany 使集合中的所有文档看起来像这样

{
     "_id" : ObjectId("***********"),
      "name" : "1234567890",
      "mobile" : "Test",
"Data":{
    .
    .
    .
    .
    .
    etc
}
    }

选项 1(嵌套字段很少):您可以按照以下方式进行:

db.collection.update({},
[
  {
   $project: {
     data: {
      name: "$name",
      mobile: "$mobile"
      }
    }
 }
],
{
  multi: true
})

playground1

方案二:(如果需要嵌套的字段太多):

 db.collection.update({},
 [
  {
   $project: {
    data: "$$ROOT",
    name: 1,
    mobile: 1
 }
 },
 {
  $unset: [
   "data.name",
   "data.mobile"
 ]
 }
],
{
  multi: true
})

playground2