Tengo una colección que se parece a esto.
[ { "project":"example1", "stores":[ { "id":"10" "name":"aa", "members":2 } ] }, { "project":"example2", "stores":[ { "id":"14" "name":"bb", "members":13 }, { "id":"15" "name":"cc", "members":9 } ] } ]Me gustaría actualizar los miembros de campo de la matriz de tiendas tomando los nuevos valores de un Mapa como, por ejemplo, este
0:{"10" => 201} 1:{"15" => 179}El resultado esperado es:
[ { "_id":"61", "stores":[ { "id":"10" "name":"aa", "members":201 } ] }, { "_id":"62", "stores":[ { "id":"14" "name":"bb", "members":13 }, { "id":"15" "name":"cc", "members":179 } ] } ]¿Cuáles son las opciones para lograr esto usando javascript/typescript?
Puede usar la función de actualización () del modelo Mongoes para actualizar su documento esperado. Intenta seguir uno:
const keyValArray= [{"10": 201},{"15":"179"}]; db.collectionName.update({_id: givenId}, { $push: { "stores": {$each: keyValArray} }}, function(err, result) { if(err) { // return error } //return success } });Al final, resolví actualizando el objeto de entidad de la base de datos original con los valores en el mapa, luego generé una consulta masiva.
for (let p of projects) { for(let s of p.stores) { if(storeUserCount.has(s.id)){ s.members = storeUserCount.get(s.id); } }; bulkQueryList.push({ updateOne: { "filter": { "_id": p._id }, "update": { "$set": {"stores": p.stores} } }}); }; await myMongooseProjectEntity.bulkWrite(bulkQueryList);