Możesz to zrobić, określając coś, co pasuje do „dokumentu”, a następnie wymaganego wpisu tablicy „przesunięć” jako wyrażenia zapytania dla .update()
. Następnie zastosuj pozycyjny $
operator
dla dopasowanego indeksu tablicy z $pull
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
W tym przypadku jest to w porządku, ponieważ próbujesz „dopasować” tylko tablicę „zewnętrzną” w strukturze zagnieżdżonej i $pull
ma własne argumenty zapytania, które identyfikują wpis w tablicy do usunięcia.
Naprawdę powinieneś być ostrożny używając "zagnieżdżonych tablic". Jak podczas $pull
operacja taka działa, aktualizacje tablicy „wewnętrznej” nie są tak naprawdę możliwe, ponieważ pozycyjny $
operator
dopasuje tylko „pierwszy” element, który spełnia warunek. Tak więc twój przykład "Mary Mack" w wielu zmianach pasowałby tylko do pierwszego znalezionego wpisu tablicy "shifts".