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.

Necesito un reemplazo para la cláusula “where” en documentDB para actualizar en masa los atributos de una colección.

Estoy trabajando en un entorno híbrido donde tenemos algunas de nuestras bases de datos funcionando en servidores de MongoDB y algunas han sido migradas a AWS DocumentDB.

En estas bases de datos, hay varios campos que contienen datos no válidos de iteraciones anteriores de nuestro proceso de desarrollo. Necesitamos eliminar varios campos donde existen múltiples registros “actualizados”. Esto fue bastante fácil en nuestro entorno de desarrollo donde pudimos usar el siguiente código:

b.getCollection(<nombre de="" colección="">).updateMany({ $where: "this.updated.length > 1" }, {$set:{"updated":[{"username":"SYSTEM","userId":"SYSTEM","cannonicalUserId":"SYSTEM","time":"2021-09-13T16:36:10.725+00:00"}]}});

Pero no puedo ejecutar este código en mis instancias de DocumentDB porque la palabra clave “where:” no es compatible.

He examinado varias alternativas, pero me preocupa que no esté aplicando correctamente la lógica condicional de configuración y sobrescribiré datos que debería preservar.

Si alguien puede indicarme la operación correcta compatible con DocumentDB, estaría muy agradecido. Se agradecen ejemplos.

La versión del motor es docdb 4.0.0

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Puedes intentar usar los métodos find() y update() en AWS DocumentDB para lograr la misma funcionalidad de eliminación. Aquí tienes un ejemplo de cómo puedes hacerlo:

    b.getCollection('<nombrecolección>').find( { "updated.1": { $exists: true } } ).forEach(function(doc) {
        doc.updated = [{ "username": "SYSTEM", "userId": "SYSTEM", "cannonicalUserId": "SYSTEM", "time": "2021-09-13T16:36:10.725+00:00" }];
        b.getCollection('<nombrecolección>').update({ _id: doc._id }, doc);
    });
    

    Este código encontrará todos los documentos en la colección donde el campo updated existe y tiene más de un registro. Luego establecerá el campo updated en un nuevo array que contiene solo un registro, con los valores que especificaste. Finalmente, actualizará el documento en la colección.

    Espero que esto te ayude. Avísame si tienes alguna pregunta.</nombrecolección></nombrecolección>

Comments are closed.