MongoDB rename database field within array

前端 未结 6 700
难免孤独
难免孤独 2020-11-28 09:16

I need to rename indentifier in this:

{ \"general\" : 
  { \"files\" : 
    { \"file\" : 
      [  
        {  \"version\" : 
          {  \"sof         


        
6条回答
  •  天命终不由人
    2020-11-28 09:36

    My proposal would be this one:

    db.nrel.component.aggregate([
       { $unwind: "$general.files.file" },
       {
          $set: {
             "general.files.file.version.identifier": {
                $ifNull: ["$general.files.file.version.indentifier", "$general.files.file.version.identifier"]
             }
          }
       },
       { $unset: "general.files.file.version.indentifier" },
       { $set: { "general.files.file": ["$general.files.file"] } },
       { $out: "nrel.component" } // carefully - it replaces entire collection.
    ])
    

    However, this works only when array general.files.file has a single document only. Most likely this will not always be the case, then you can use this one:

    db.nrel.componen.aggregate([
       { $unwind: "$general.files.file" },
       {
          $set: {
             "general.files.file.version.identifier": {
                $ifNull: ["$general.files.file.version.indentifier", "$general.files.file.version.identifier"]
             }
          }
       },
       { $unset: "general.files.file.version.indentifier" },
       { $group: { _id: "$_id", general_new: { $addToSet: "$general.files.file" } } },
       { $set: { "general.files.file": "$general_new" } },
       { $unset: "general_new" },
       { $out: "nrel.component" } // carefully - it replaces entire collection.
    ])
    

提交回复
热议问题