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.

Mongodb: Actualizar múltiples documentos con valores de filtro diferentes.

Hay una colección de estudiantes en mi base de datos como se muestra a continuación.

Colección de estudiantes de Mongodb:

{
    name : 'Rahul',
    age : '15'
}
{
    name : 'Ajay',
    age : '25'
}
{
    name : 'Pinku',
    age : '43'
}
{
    name : 'Vinod',
    age : '30'
}

Estoy obteniendo un array de datos después de hacer una solicitud a un sistema externo para los estudiantes anteriores.

[
    {'name':'Ajay','marks':20},
    {'name':'Pinku','marks':12},
    {'name':'Vinod','marks':50},
    {'name':'Rahul','marks':80}
]

Mi tarea es actualizar el registro de la colección de estudiantes con las marcas del estudiante correspondiente. ¿Hay alguna manera de hacerlo en una sola operación DML, en lugar de recorrer cada documento de estudiante y actualizarlo con las marcas?

La salida debería ser:

Colección de estudiantes de Mongod:

{
    name : 'Rahul',
    age : '15',
    marks : 80
}
{
    name : 'Ajay',
    age : '25',
    marks : 20
}
{
    name : 'Pinku',
    age : '43',
    marks : 12
}
{
    name : 'Vinod',
    age : '30',
    marks : 50
}

Nota: Quiero hacer esto dentro de la interfaz de usuario de MondbDB Realm, para automatizar algunas funcionalidades.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible realizar esta tarea en una operación DML usando el método updateMany() de MongoDB. Puede usar el operador $set para actualizar los documentos coincidentes con las nuevas notas.

    El siguiente fragmento de código muestra cómo lograr esta tarea:

    db.Student.updateMany(
      {},
      [
        {$set: {marks: {$first: {$filter: {input: [
          {name: 'Ajay', marks: 20},
          {name: 'Pinku', marks: 12},
          {name: 'Vinod', marks: 50},
          {name: 'Rahul', marks: 80}
        ], cond: {$eq: ['$name', '$$this.name']}}}}}}
      ]
    );
    

    Aquí, estamos usando el método updateMany() para actualizar todos los documentos en la colección Student. El primer parámetro ({}), especifica un filtro vacío, que coincide con todos los documentos en la colección.

    El segundo parámetro, una matriz, contiene la operación de actualización. Aquí, estamos usando el operador $set para actualizar el campo de notas. Usando el operador $filter, podemos extraer el registro de estudiante coincidente de la matriz de datos externos usando el operator $eq para comparar los nombres. Finalmente, estamos usando el operador $first para extraer el valor de notas del registro de estudiante coincidente.

    Puede ejecutar este código dentro de la interfaz de usuario de MongoDB Realm creando una Función y agregando este código a la sección de código de la Función. Luego, puede llamar a esta Función usando un Desencadenador cuando sea necesario.

Comments are closed.