MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

removendo o objeto da matriz aninhada de objetos mongodb


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.