15 Stimmen

Ändern von Schemas in mongoDB/mongoose

Ich fange gerade mit mongoDB und mongoose an. Ich frage mich, wie Leute sich entwickelnde Schemas verwalten. Zum Beispiel, wenn ich mit einem Schema wie diesem angefangen habe:

user_ID : 123,
user_firstName : 'bob',
user_lastName : 'smith'

Und es zu etwas wie diesem weiterentwickelt habe:

user_ID: 123,
user_name: [first:'bob', last:'smith']

Wie kann ich alte Datensätze aktualisieren oder verwalten, die mit dem alten Schema-Design erstellt wurden?

18voto

Stennie Punkte 61270

Ein Ansatz zur Migration von Dokumentschemata mit einfachen Datentransformationen wäre die Verwendung von $exists, um Dokumente zu finden, die die neuen Felder fehlen und diese zu migrieren.

Zum Beispiel, die Umwandlung von firstName und lastName in ein neues user_name Feld:

db.mycollection.find( { user_name : { $exists : false } } ).forEach(
    function (doc) {
        doc.user_name = {'first': doc.user_firstName, 'last': doc.user_lastName};

        // Alte Eigenschaften entfernen
        delete doc.user_firstName;
        delete doc.user_lastName;

        // Das aktualisierte Dokument speichern
        db.mycollection.save(doc);
    }
)

Für komplexere Migrationen könnten einige hilfreiche Tools sein:

0 Stimmen

Löschen Eigenschaften auf diese Weise hat für mich nicht funktioniert. Ich musste etwas wie das verwenden db.mycollection.update({}, { $unset: { user_firstname: 1, user_lastname: 1 } }, { multi: true })

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X