Você pode fazer isso especificando algo para corresponder ao "documento" e, em seguida, à entrada de matriz "shifts" necessária como a expressão de consulta para um
.update()
. Em seguida, aplique o $
posicional operador
para o índice de matriz correspondente com $pull
:db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
Tudo bem neste caso, pois você está apenas tentando "combinar" na matriz "externa" na estrutura aninhada e no
$pull
tem argumentos de consulta próprios para identificar a entrada da matriz a ser removida. Você realmente deve ter cuidado ao usar "arrays aninhados". Enquanto um
$pull
operação como esta funciona, as atualizações para a matriz "interna" não são realmente possíveis, pois o posicional $
operador
corresponderá apenas ao "primeiro" elemento que atende à condição. Portanto, seu exemplo de "Mary Mack" em vários turnos só corresponderia à primeira entrada da matriz "shifts" encontrada.