Cómo eliminar un objeto anidado en una colección de mongodb
La colección que tengo se ve así:
[{
"day": 10,
"orders": [{
"id": 1,
"items": {
"uuid1": {
"name": "item1",
"status": false
},
"uuid2": {
"name": "item2",
"status": true
},
"uuid3": {
"name": "item2",
"status": false
}
}
}]
},
{
"day": 11,
"orders": [{
"id": 1,
"items": {
"uuid1": {
"name": "item1",
"status": false
},
"uuid2": {
"name": "item2",
"status": true
},
"uuid3": {
"name": "item2",
"status": false
}
}
}]
}]
Me gustaría eliminar los elementos con estado marcado como verdadero para el día 10. Intenté el siguiente código:
db.<collection>.update(
{day: 10},
{$pull: {
orders: {items: {status: 'true'}}
}},
{multi: true}
);
El resultado es:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
por lo tanto, no se eliminan los elementos.
¿Cómo deberíamos reescribir esta consulta de actualización y eliminación para que se eliminen los elementos del día 10 marcados con estado verdadero?
davy.ai
Para eliminar los elementos del día 10 con estado marcado como verdadero, la consulta necesita especificar el campo
id
en la matrizorders
junto conitems
para actualizar el subdocumento. La consulta se puede reescribir de la siguiente manera:Esta consulta actualizará el subdocumento en la matriz
orders
conid
igual a 1 en el documento conday
igual a 10. El operador$
se usa para identificar el elemento coincidente en la matrizorders
, y luego se actualiza el campoitems
usando$pull
para eliminar subdocumentos constatus
igual a verdadero. La opciónmulti
se establece enverdadero
en caso de que se devuelvan varios documentos conday
igual a 10.</colección>