Можете да направите това, като посочите нещо, което да съответства на „документа“ и след това необходимия запис в масива „измества“ като израз на заявката за .update()
. След това приложете позиционния $
оператор
за съответстващия индекс на масив с $pull
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
Това е добре в този случай, тъй като вие се опитвате само да „съпоставите“ „външния“ масив във вложената структура и $pull
има собствени аргументи на заявката за идентифициране на записа в масива за премахване.
Наистина трябва да внимавате с използването на "вложени масиви". Докато $pull
операция като тази работи, актуализациите на "вътрешния" масив не са наистина възможни, тъй като позиционен $
оператор
ще съответства само на "първия" елемент, който отговаря на условието. Така че вашият пример за "Мери Мак" в няколко смени ще съвпадне само в първия намерен запис в масива "смени".