Actualizar el campo de matriz anidada para múltiples documentos a la vez.
Tengo un gran número de registros en la colección con la siguiente estructura.
Aquí quiero actualizar todos los campos de “floor” como una cadena vacía “”, donde sea “n/a”. No debe afectar a otros bloques que ya tienen valor para el piso, como el primer o segundo piso.
¿Alguien puede ayudarme con esto?
JSON
{
“id”: “181”,
“EID”: “83”,
“History”: [
{
“aNum”: “12324”,
“dev”: [
{
“type”: “”,
“room”: “Oficina”,
“floor”: “Segundo Piso”
},
{
“type”: “”,
“room”: “Dormitorio”,
“floor”: “n/a”
},
{
“type”: “”,
“room”: “Dormitorio”,
“floor”: “Primer Piso”
},
{
“type”: “”,
“room”: “Dormitorio”,
“floor”: “n/a”
}
]
}
]
}
davy.ai
Para actualizar todos los campos de
floor
como una cadena vacía""
donde se encuentre “n/a”, puedes usar el métodoupdate_many()
con el operador$set
en pymongo. Aquí te dejamos un ejemplo de código:En el código anterior, primero nos conectamos a nuestra base de datos MongoDB y colección utilizando la clase
MongoClient()
en pymongo.Luego, usamos el método
update_many()
para actualizar todos los documentos donde el campodev.floor
es “n/a”. El primer argumento deupdate_many()
es el objeto de filtro / consulta que especifica qué documentos actualizar. En este caso, usamos la notación de punto para especificar el campo anidado que queremos consultar (Historial.dev.floor
). El segundo argumento es el objeto de actualización que especifica qué cambios hacer en los documentos coincidentes. Aquí, utilizamos el operador$set
para establecer el campofloor
en una cadena vacía""
. También utilizamos dos nuevos operadores$[]
y$[elem]
para actualizar todos los elementos en los arrays anidados que coinciden con la condición de filtro.Finalmente, usamos un parámetro
array_filters
para establecer la condición para el operador$[elem]
. En este caso, queremos actualizar sólo los elementos donde el campofloor
es “n/a”.Ten en cuenta que este código actualizará todos los documentos coincidentes en la colección. Si quieres probar este código antes de ejecutarlo en tus datos de producción, considera primero ejecutarlo en una base de datos o colección de prueba.