Direkt zum Inhalt

Wie man updateMany() in MongoDB verwendet, um mehrere Dokumente zu ändern

Lerne, wie du den updateMany()-Operator in MongoDB nutzen und seine Leistung optimieren kannst, um mehrere Dokumente in einem einzigen Vorgang zu aktualisieren.
Aktualisierte 13. Juni 2025  · 4 Min. Lesezeit

Bei MongoDB kann es Szenarien geben, in denen du mehrere Dokumente mit einer einzigen Operation aktualisieren möchtest. Du könntest zwar die Dokumente in einer Schleife durchgehen und sie einzeln aktualisieren, aber updateMany bietet eine schnellere und effizientere Lösung.

In diesem kurzen Lernprogramm lernen wir, wie wir den updateMany-Operator in MongoDB verwenden und Abfragen optimieren, um die bestmögliche Leistung zu erzielen.

Um eine solide Grundlage für die Datenverarbeitung in MongoDB mit Python zu schaffen, solltest du den Kurs Einführung in MongoDB in Python besuchen.

Ein praktisches Beispiel für das Aktualisieren mehrerer MongoDB-Dokumente

Um dieses Konzept zu veranschaulichen, nehmen wir ein praktisches Beispiel, bei dem du vielleicht mehr als ein Dokument gleichzeitig aktualisieren möchtest.

Nimm die folgenden Daten als Grundlage für unser Beispiel:

[
    { "name": "Nic Raboy", "title": "Master of Shenanigans", "salary": 50000, "last_raise_date": new Date("2013-06-01") },
    { "name": "Megan Grant", "title": "Word Wrangler", "salary": 125000, "last_raise_date": new Date("2020-12-01") },
    { "name": "Tony Kim", "title": "Alliance Czar", "salary": 80000, "last_raise_date": new Date("2025-02-01") },
];

Im obigen JSON haben wir drei Mitarbeiter in einem fiktiven Unternehmen. Das Unternehmen will allen eine Gehaltserhöhung zukommen lassen, die eine gewisse Zeit lang keine Gehaltsanpassung erhalten haben.

Um alle, die sich qualifizieren, zu aktualisieren, können wir den updateMany Operator in MongoDB verwenden. Um unsere Aufgabe zu erfüllen, könnten wir mit einer Anweisung enden, die wie die folgende aussieht:

db.employees.updateMany(
    {
        "last_raise_date": {
            "$lte": new Date("2024-01-01")
        }
    },
    {
        "$mul": { "salary": 1.06 },
        "$set": { "last_raise_date": new Date() }
    }
);

Was bewirkt die obige updateMany Operation?

Wenn wir einen Schritt zurückgehen, benötigt der updateMany Operator zwei Parameter und einen optionalen dritten Parameter. 

  • Der erste Parameter ist ein Objekt, das die Daten repräsentiert, die wir filtern wollen. 
  • Der zweite Parameter ist die Änderung, die wir an den im Filter gefundenen Ergebnissen vornehmen wollen. 
  • Der optionale dritte Parameter könnte { “upsert”: true } sein, der ein Dokument einfügen würde, wenn es keine Treffer gibt.

Zu diesem Zweck filtern wir zunächst nach allen Dokumenten, deren last_raise_date vor dem "2024-01-01" liegt. Wenn wir auf unseren Basisdatensatz zurückblicken, wissen wir, dass zwei der drei Dokumente übereinstimmen:

[
    { "name": "Nic Raboy", "title": "Master of Shenanigans", "salary": 50000, "last_raise_date": new Date("2013-06-01") },
    { "name": "Megan Grant", "title": "Word Wrangler", "salary": 125000, "last_raise_date": new Date("2020-12-01") }
];

Basierend auf dem Parameter Änderungskriterien werden zwei verschiedene Änderungen an den gefilterten Dokumenten vorgenommen.

"$mul": { "salary": 1.06 },

Zuerst benutzen wir den $mul Operator, um eines unserer Felder mit einem Wert zu multiplizieren. In unserem Beispiel wollen wir jedem qualifizierten Mitarbeiter eine Gehaltserhöhung von 6 % geben. Das bedeutet, dass wir den aktuellen Wert des Feldes einfach mit 1,06 multiplizieren.

Um die Gehaltsanpassungen zu dokumentieren und gleichzeitig versehentliche Erhöhungen in der Zukunft zu verhindern, wollen wir die last_raise_date auf das aktuelle Datum aktualisieren:

"$set": { "last_raise_date": new Date() }

Wenn wir unseren updateMany Vorgang erneut ausführen würden, würde nichts passieren, weil die im Filter gefundene last_raise_date mit keinem unserer drei Dokumente mehr übereinstimmen würde.

Das ist nur ein Beispiel, aber deine Filterkriterien könnten viel komplexer sein, und auch das, was du ändern willst, könnte komplexer sein, je nach Anwendungsfall.

Steigere die Leistung deines Updates mit einem MongoDB-Index

In unserem Beispiel haben wir mit drei kleinen Dokumenten gearbeitet. Egal, was wir mit unserer Sammlung anstellen, es wird schnell gehen, denn wir werden nicht mit viel arbeiten müssen. Stell dir jedoch eine Produktionsanwendung vor, in der du mit Millionen von Dokumenten arbeitest oder häufig den Aktualisierungsvorgang durchführst.

Wenn wir versuchen würden, den updateMany Operator auf Millionen von Dokumenten anzuwenden, könnte das einige Zeit dauern, es sei denn, wir hätten einen geeigneten Index für unsere Filterkriterien erstellt.

Um einen Index für unser Beispiel zu erstellen, können wir etwas wie folgt ausführen:

db.employees.createIndex({ "last_raise_date": 1 });

Du kannst überprüfen, ob die Operation updateMany unseren Index verwendet, indem du Folgendes ausführst:

db.runCommand({
    "explain": {
        "update": "employees",
        "updates": [
            {
                "q": { 
                    "last_raise_date": { 
                        "$lte": new Date("2024-01-01") 
                    }
                },
                "u": {
                    "$mul": { "salary": 1.06 },
                    "$set": { "last_raise_date": new Date() }
                }
            }
        ]
    },
    "verbosity": "allPlansExecution"
});

Wenn in den Ergebnissen inputStage "IXSCAN" steht, verwendest du einen Index und maximierst deine updateMany Leistung. Wenn die inputStage "COLLSCAN" lautet, dann verwendest du keinen Index und musst möglicherweise überdenken, wie du deinen Index auf der Grundlage deiner Filterkriterien erstellst.

Um Unklarheiten zu beseitigen, verwenden wir runCommand, um ein Profil unseres Vorgangs der Aktualisierung mehrerer Dokumente zu erstellen. Wenn du keine Profiler-Informationen brauchst, bleib bei der viel einfacheren und eleganteren updateMany Operation.

Fazit

Mehrere Dokumente in einer einzigen Operation in MongoDB zu aktualisieren, ist keine schwierige Aufgabe, wie wir im Laufe des Tutorials gesehen haben. 

Mit dem Operator updateMany können wir ein Filterkriterium definieren, mit dem wir unsere Dokumente abgleichen, und dann ein Änderungskriterium mit einer Liste von Änderungen, die wir vornehmen müssen. Diese updateMany Operation kann weiter optimiert werden, indem du sicherstellst, dass du einen richtigen Index hast, der zu deinen Filterkriterien passt.

Wenn du dich zum ersten Mal mit nicht-relationalen Datenbanken beschäftigst, bietet dir der Kurs Einführung in NoSQL einen hilfreichen Überblick über Konzepte wie Dokumentenspeicher.

Werde Dateningenieur

Beweise deine Fähigkeiten als einsatzbereiter Datentechniker.
Meine Datenkarriere auf der Überholspur

FAQs

Was ist der Unterschied zwischen updateOne und updateMany in MongoDB?

 updateOne ändert das erste passende Dokument, während updateMany alle Dokumente aktualisiert, die den Filterkriterien entsprechen. Wähle nach dem gewünschten Umfang der Veränderung.

Kann updateMany mit upsert in MongoDB verwendet werden?

Ja, wenn du { upsert: true } als drittes Argument hinzufügst, wird ein neues Dokument eingefügt, wenn keine Treffer gefunden werden. Es wird jedoch häufiger mit updateOne verwendet.

Was sind die häufigsten Anwendungsfälle für updateMany?

Sie wird oft für Batch-Updates verwendet, z. B. für die Anpassung von Preisen, die Änderung von Benutzerstatus oder die Bereinigung veralteter Felder in großen Datensätzen.

Gibt updateMany irgendwelche Ergebnisdaten zurück?

Ja, sie gibt ein Objekt mit Informationen wie matchedCount und modifiedCount zurück, das angibt, wie viele Dokumente abgeglichen und aktualisiert wurden.

Was passiert, wenn keine Dokumente dem Filter in updateMany entsprechen?

Wenn keine Dokumente übereinstimmen und upsert nicht verwendet wird, wird der Vorgang ohne Änderungen abgeschlossen. Es wird kein Fehler ausgelöst.

Ist updateMany in MongoDB atomar?

Nein, es ist nicht atomar über mehrere Dokumente hinweg. Jede Aktualisierung eines Dokuments ist für sich genommen atomar, aber nicht im Ganzen.

Wie kann ich die Leistung von updateMany-Operationen testen?

Verwende die Methoden explain() oder runCommand({ explain: ... }), um herauszufinden, ob deine Abfrage einen Index verwendet oder eine Sammelabfrage durchführt.

Kann ich mehrere Aktualisierungsoperatoren in updateMany verketten?

Ja, MongoDB unterstützt die Kombination von Operatoren wie $set, $inc, $mul, etc. in einem einzigen updateMany Aufruf.

Welche Auswirkungen haben Indizes auf updateMany-Operationen?

Indizes können die Leistung drastisch verbessern, indem sie die Anzahl der gescannten Dokumente während des Filterns reduzieren.

Wie kann ich einen versehentlichen updateMany-Vorgang rückgängig machen?

Du müsstest von einem Backup oder Log wiederherstellen, da MongoDB kein eingebautes Rollback für updateMany hat. Teste immer zuerst im Staging und sichere die Produktionsdaten.


Nic Raboy's photo
Author
Nic Raboy

Nic Raboy ist Developer Relations Lead bei MongoDB. Er leitet ein Team von Python-, Java-, C#- und PHP-Entwicklern, die großartige Inhalte erstellen, um Entwicklern zu helfen, MongoDB erfolgreich in ihre Projekte einzubinden. Er hat Erfahrung mit Golang und JavaScript und schreibt oft über seine Entwicklungsabenteuer.

Themen

Lerne mehr über MongoDB und Datenbanken mit diesen Kursen!

Kurs

Introduction to Databases in Python

4 Std.
98.8K
In this course, you'll learn the basics of relational databases and how to interact with them.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

15 Min.

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Die 50 besten AWS-Interview-Fragen und Antworten für 2025

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interviewfragen, zusammen mit Fragen, die auf realen Situationen basieren.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Mehr anzeigenMehr anzeigen