sql >> Base de Datos >  >> NoSQL >> MongoDB

eliminando objeto de una matriz anidada de objetos mongodb

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.