MongoDB modyfikuje dane metodami (/), (/ z operatorami) i (/). Aktualizacje używają zamiast zastępować całe dokumenty — ważne rozróżnienie.
MongoDB modyfikuje dane metodami (/), (/ z operatorami) i (/). Aktualizacje używają zamiast zastępować całe dokumenty — ważne rozróżnienie.
insertOneinsertManyupdateOneupdateManydeleteOnedeleteManydb.users.insertOne({ name: "Ann", age: 30 }); // → returns the inserted _id
db.users.insertMany([{ name: "Bob" }, { name: "Carol" }]); // bulk insert (efficient)
// updateOne — filter (which doc) + update (with OPERATORS)
db.users.updateOne(
{ name: "Ann" },
{ $set: { age: 31, status: "active" } } // $set: change specific fields
);
// common update operators
{ $set: { field: value } } // set/change a field
{ $unset: { field: "" } } // remove a field
{ $inc: { count: 1 } } // increment a number
{ $push: { tags: "new" } } // add to an array
{ $pull: { tags: "old" } } // remove from an array
{ $addToSet: { tags: "x" } } // add to array only if not present
db.users.updateMany({ active: false }, { $set: { archived: true } }); // update all matching
Ważne: aktualizacje używają operatorów ($set, $inc, $push, itd.) do modyfikacji konkretnych pól. Bez operatora zastąpiłbyś cały dokument — częsty błąd:
// ❌ this REPLACES the whole document (loses other fields!)
db.users.updateOne({ name: "Ann" }, { age: 31 }); // Ann now has ONLY age!
// ✅ use $set to change just the field
db.users.updateOne({ name: "Ann" }, { $set: { age: 31 } });
db.users.deleteOne({ name: "Ann" }); // delete the first match
db.users.deleteMany({ active: false }); // delete all matching
db.users.deleteMany({}); // ⚠️ deletes ALL documents!
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Ann" } },
{ upsert: true } // if no match, INSERT a new document
);
Operacje insert, update i delete to sposób, w jaki aplikacje modyfikują dane w MongoDB, fundamentalne dla każdej aplikacji opartej na danych, dlatego ich zrozumienie jest niezbędną codzienną wiedzą.
Znajomość metod (insertOne/insertMany do tworzenia, updateOne/updateMany do modyfikacji, deleteOne/deleteMany do usuwania) obejmuje podstawy.
Najważniejszy i najczęściej źle rozumiany punkt to fakt, że aktualizacje MongoDB używają operatorów aktualizacji ($set, $inc, $push, $pull, itd.) do modyfikacji konkretnych pól — i kluczowe jest to, że pominięcie operatora zastępuje cały dokument (znany pułapka, gdzie updateOne({...}, {age: 31}) wymazuje wszystkie inne pola, pozostawiając tylko age), dlatego zrozumienie zawsze używania $set (i innych operatorów) do aktualizacji na poziomie pola jest niezbędne dla poprawności.
Znajomość popularnych operatorów ($set, $inc do liczników, $push/$pull/$addToSet do tablic — operatory tablic będące szczególnie istotne ze względu na bogate w tablice dokumenty MongoDB) to ważna codzienną wiedza.
Zrozumienie upsert ({ upsert: true } — wstaw jeśli brak dopasowania, insert-or-update MongoDB) jest wartościowe dla częstego wzorca insert-lub-update.
Warto również zwrócić uwagę na niebezpieczeństwo deleteMany({}) (usunięcie wszystkiego — podobnie do braku WHERE w SQL).
Ponieważ modyfikacja danych jest fundamentalna, a MongoDB operatory aktualizacji (z pułapką zastępowania dokumentu), operatory tablic i upsert to sposób, w jaki poprawnie zmieniasz dane, zrozumienie insert/update/delete — szczególnie krytyczne rozróżnienie update-operator (unikanie przypadkowego zastępowania dokumentu) — jest niezbędną, must-know wiedzą dla każdego rozwoju MongoDB, gdzie pułapka operatora w szczególności jest częstym źródłem prawdziwych błędów.