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.

Referencia a un campo existente en updateMany() de MongoDB v5.0.5.

La primera vez que uso MongoDB y tengo un problema que agradecería que me ayudaran, por favor.

Digamos que tengo una colección llamada “students” con documentos estructurados de la siguiente manera:

{
    "_id": ObjectId("12345"),
    "Name": "Joe Bloggs",
    "Class_Grade": "b",
    "Homework_Grade": "c"
}

Quiero crear un documento incrustado llamado “Grades” que contenga los campos de calificación de clase y tarea y aplicarlo a cada documento en la colección para obtener lo siguiente:

{
    "_id": ObjectId("12345"),
    "Name": "Joe Bloggs",
    "Class_Grade": "b",
    "Homework_Grade": "c",
    "Grades": {
        "Class_Grade": "b",
        "Homework_Grade": "c"
    }
}

He estado intentando lograr esto usando updateMany() en MongoShell:

db.students.updateMany({}, {$set: {Grades: {"Class_Grade": $Class_Grade, "Homework_Grade": $Homework_grade}}})

Sin embargo, al hacerlo, recibo un error de referencia: $Class_Grade no está definido. He intentado modificar la referencia a $students.Class_Grade y recibo el mismo error.

Agradecería mucho su consejo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Estimado usuario,

    Para lograr la estructura de documento embebido deseada, puedes utilizar la siguiente consulta updateMany():

    db.students.updateMany({},{$set: { "Grades": { "Class_Grade": "$Class_Grade", "Homework_Grade":"$Homework_Grade" }}})
    

    Esta consulta añadirá el documento embebido “Grades” a todos los documentos en la colección “students”. Además, ten en cuenta que necesitas encerrar los nombres de campo entre comillas en lugar de comillas dobles como se muestra en tu consulta original. También necesitas utilizar el operador “$” para acceder a los valores de los campos en el documento que se está actualizando.

    Espero que esto te sea de ayuda. Hazme saber si tienes alguna otra consulta.

    Saludos cordiales.

Comments are closed.