RESUELTO: SOLUCIÓN EN LA PARTE INFERIOR
Tengo el siguiente Código donde estoy actualizando elemento por elemento:
//registerCustomers.js const CustomerRegistrationCode = require("../models/CustomerRegistrationCode"); const setRegCodesToUsed = async (regCodes) => { for (let regCode of regCodes) { await setRegCodeToUsed(regCode._id); } }; const setRegCodeToUsed = async (id) => { await CustomerRegistrationCode.findByIdAndUpdate(id, { used: true }); };El código funciona bien, pero es lento y quiero actualizar muchos (1000) códigos de registro de cliente a la vez. Eché un vistazo a la función de middleware updateMany pero no encontré mucha información en línea ni en los documentos oficiales. Cambié mi código a lo siguiente, pero no sé cómo más.
//registerCustomers.js const setRegCodesToUsed = async (regCodes) => { await CustomerRegistrationCode.updateMany(regCodes); } //CustomerRegistrationCode.js CustomerRegistrationCodeSchema.pre('updateMany', async function (next, a) { console.log('amount arguments: ', arguments.length); //is 2 console.log(arguments); //both parameters are functions. next(); });¿Cuál sería la mejor manera de actualizar muchos CustomerRegistrationCodes con 1000 ID diferentes?
SOLUCIÓN, gracias a Murat Colyaran
const setRegCodesToUsed = async (regCodes) => { const ids = []; regCodes.map(code => ids.push(code._id)); await setRegCodeToUsed(ids); }; const setRegCodeToUsed = async (ids) => { await CustomerRegistrationCode.updateMany( { _id: { $in: ids } }, { used: true } ); };Esto debería funcionar:
//registerCustomers.js const CustomerRegistrationCode = require("../models/CustomerRegistrationCode"); const setRegCodesToUsed = async (regCodes) => { let ids = []; regCodes.map((code) => ids.push(code._id.toString())); await setRegCodeToUsed(ids); }; const setRegCodeToUsed = async (ids) => { await CustomerRegistrationCode.updateMany( { id : { $in: ids } }, { used: true } ); }; En lugar de enviar una consulta para cada registro, solo analizamos la id y enviamos una solicitud masiva con $in