W MongoDB możesz użyć $pop
operator do usunięcia pierwszego lub ostatniego elementu z tablicy.
Użyj $pop
w połączeniu z metodą taką jak update()
aby zaktualizować określony dokument ze zmianą.
Użyj -1
aby usunąć pierwszy element i 1
aby usunąć ostatnie.
Przykład
Załóżmy, że mamy kolekcję o nazwie products
z następującymi dokumentami:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Usuń pierwszy element
Możemy usunąć pierwszy element tablicy w dokumencie 1 w ten sposób:
db.products.update(
{ _id: 1 },
{ $pop: { sizes: -1 } }
)
Wyjście:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ta wiadomość mówi nam, że jeden dokument pasował, a jeden (tj. ten sam dokument) został zmodyfikowany.
Przyjrzyjmy się teraz kolekcji:
db.products.find()
Wynik:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Widzimy, że pierwszy element tablicy w dokumencie 1 został usunięty.
Usuń ostatni element
Teraz usuńmy ostatni element z tablicy w dokumencie 2:
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
Wyjście:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Teraz ponownie sprawdźmy kolekcję:
db.products.find()
Wynik:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Widzimy, że ostatni element został usunięty z tablicy w dokumencie 2.
Aktualizuj wszystkie dokumenty
Oto przykład, który używa updateMany()
metoda aktualizacji wszystkich dokumentów:
db.products.updateMany(
{ },
{ $pop: { sizes: 1 } }
)
Wyjście:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
I ponownie sprawdź kolekcję:
db.products.find()
Wynik:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }
Alternatywnie możesz użyć update()
metoda aktualizacji wielu dokumentów przez określenie multi: true
.