Puede hacer esto especificando algo que coincida con el "documento" y luego la entrada de la matriz de "cambios" requerida como la expresión de consulta para un .update()
. Luego aplique el posicional $
operador
para el índice de matriz coincidente con $pull
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
Eso está bien en este caso, ya que solo está tratando de "coincidir" en la matriz "externa" en la estructura anidada y $pull
tiene sus propios argumentos de consulta para identificar la entrada de la matriz que se va a eliminar.
Sin embargo, debe tener cuidado al usar "matrices anidadas". Como si fuera un $pull
operación como esta funciona, las actualizaciones de la matriz "interna" no son realmente posibles ya que posicional $
operador
solo coincidirá con el "primer" elemento que cumpla la condición. Por lo tanto, su ejemplo de "Mary Mack" en varios turnos solo coincidiría con la primera entrada de matriz de "turnos" encontrada.