2016-05-27 12 views
1

Ich habe eine Dokumentstruktur in Mongodb und ich möchte es für alle meine Dokumente ändern, ohne Aggregatfunktion wie response zu verwenden, sondern durch Erstellen einer bestimmten Funktion, und ein Ergebnis daraus:Ändern Sie Dokumentstruktur in Mongodb mit der Mongo-Shell

{ 
"_id" : ObjectId("String"), 
"content" : { 
    "href" : "String", 
    "text" : "String", 
    "code" : "String " 
} 
} 

zu, dass:

{ 
"_id" : ObjectId("String"), 
"href" : "String", 
"text" : "String", 
"code" : "String " 
} 

Irgendwelche Vorschläge bitte. Vielen Dank.

Antwort

2

Wenn Sie keine Lust Aggregation tun (oder Ihre content ‚s Inhalt kann über Dokumente unterscheiden) können Sie auch

db.coll.find().forEach(function (d) { 
    db.coll.update({ 
     _id : d._id 
    }, { 
     $set : d.content, 
     $unset : { 
      'content' : 1 
     } 
    }) 
}); 
+0

danke es funktioniert :) –

2

Der einfachste Weg, dies zu tun, ist Aggregation Framework zu verwenden. Dann speichern Sie die Ausgabe in newCollection und nach der Überprüfung können Sie alte löschen und erstellte erstellt.

db.collection.aggregate([{ 
      $project : { 
       _id : 1,  
       href : "$content.href", 
       text : "$content.text", 
       code : "$content.code",  
      } 
     }, { 
      $out : "newCollection" 
     } 
    ]) 
+0

vielen Dank für Ihre Antwort, aber in der Tat möchte ich eine spesific verwenden funktionieren wie die vorherige Antwort. vielen Dank. –