Use MongoDB $Pull para eliminar documentos dentro de un array
El operador $pull
puede obtener cualquier elemento existente del array. Puede extraer uno o más elementos del array.
Puede eliminar cualquier objeto específico del array anidada.
Operador MongoDB $pull
$pull
se usa en MongoDB para eliminar elementos existentes del array. El $pull
se usa con la consulta update
.
Aquí hay un ejemplo. Insertamos lo siguiente.
db.cart.insertMany( [
{
_id: 1,
grocery:["biscuits", "oil", "honey", "milk", "paper"],
electronics:["earphone", "bluetooth", "mouse", "keyboard"]
},
{
_id: 2,
grocery:["biscuits", "oil", "soda", "water", "paper"],
electronics:["pendrive", "motherboard", "mouse", "SSD"]
}
] )
Aquí hay dos carritos de compras. Digamos que la tienda no tiene stock de paper
, SSD
o mouse
.
Entonces, desea eliminar estos productos del carrito de compras. Luego puede usar la siguiente consulta usando el operador $pull
.
db.cart.updateMany({},
{
$pull:{ grocery: "paper", electronics:{ $in:[ "SSD","mouse" ] } }
}
)
El operador $in
toma un array para hacer coincidir cada elemento con el documento. Después de esta operación, la colección será como la siguiente.
{
_id: 1,
grocery:["biscuits", "oil", "honey", "milk"],
electronics:["earphone", "bluetooth", "keyboard"]
},
{
_id: 2,
grocery:["biscuits", "oil", "soda", "water"],
electronics:["pendrive", "motherboard"]
}
Comando MongoDB $pull
con condición
Supongamos que tenemos el siguiente documento.
{
_id: 1,
price: [ 31, 50, 55, 66, 98, 25 ]
},
{
_id: 2,
price: [ 51, 55, 65, 91, 19, 26 ]
},
Ahora, desea eliminar los elementos del array price
con un valor superior a 50. Entonces el comando será como el siguiente.
db.products.updateMany(
{},
{ $pull: { price:{ $gte : 50} } }
)
Verá que usamos {}
como el primer parámetro de updateMany
. Esto se debe a que queremos actualizar todos los elementos.
Digamos que desea actualizar solo algunos _id
específicos, entonces el comando será como el siguiente.
db.products.updateMany(
{_id: 1},
{ $pull: { price:{ $gte : 50} } }
)
También puede usar el operador $in
en el _id
para seleccionar múltiples _id
para actualizar y usar la operación pull
.
Usar $pull
en el Array anidado
Supongamos que tiene la siguiente colección de documentos.
db.survey.drop()
db.survey.insertMany( [
{
_id: 1,
results: [
{
item: "A",
score: 5,
answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
},
{
item: "B",
score: 8,
answers: [ { q: 1, a: 8 }, { q: 2, a: 9 } ]
}
]
},
{
_id: 2,
results: [
{
item: "C",
score: 8,
answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
},
{
item: "B",
score: 4,
answers: [ { q: 1, a: 0 }, { q: 2, a: 8 } ]
}
]
}
] )
Queremos eliminar aquellos elementos del array results
en los que q
es igual a 2, y a
es mayor que igual a 8. Entonces la consulta será:
db.survey.updateMany(
{ },
{
$pull:
{
results:
{
answers: { $elemMatch: { q: 2, a: { $gte: 8 } } }
}
}
}
)
Después de esta operación, la colección actualizada se verá así:
{
_id: 1,
results: [
{
item: 'A',
score: 5,
answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
}
]
},
{
_id: 2,
results: [
{
item: 'C',
score: 8,
answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
}
]
}
Este ejemplo de array anidada se tomó de la documentación oficial de MongoDB. Aquí puedes leer la documentación completa y saber más sobre el operador $pull
.