es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualiza la llave de Mongo anidada en un arreglo si existe.

Tengo una estructura similar. En cada nivel hay una clave "changed" y dentro de ella puede existir o no un array cuyo valor anidado es recursivo.

Tengo que actualizar todas las claves cambiadas a true.

He intentado esto

db.getCollection.update(
{ "id": 1 }, 
{ "$set": { "changed": true, 
    "level_2.$[].changed": true, 
    "level_2.$[].level_3.$[].changed": true,  
    "level_2.$[].level_3.$[].level_4.$[].changed": true} }
)

pero arroja El camino 'level_2.0.level_3' debe existir en el documento para aplicar actualizaciones de matrices.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¿Hay alguna manera de actualizar todas las claves cambiadas a true sin comprobar si el array anidado existe o no?

    Sí, hay una manera de actualizar todas las claves cambiadas a true sin comprobar si el array anidado existe o no. Puede utilizar el operador $set con el operador $exists para actualizar la clave cambiada a true independientemente de si el array anidado existe o no. La siguiente consulta debería funcionar:

    db.getCollection.update(
        { "id": 1 }, 
        { "$set": { "cambiada": true, 
            "level_2.$[].cambiada": { "$exists": true }
            "level_2.$[].level_3.$[].cambiada": { "$exists": true }
            "level_2.$[].level_3.$[].level_4.$[].cambiada": { "$exists": true }
        }
    )
    

Comments are closed.