Files
freeCodeCamp/curriculum/challenges/espanol/05-back-end-development-and-apis/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.md

2.4 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7fb8367417b2b2512c0e Realiza las actualizaciones clásicas ejecutando "find", "edit" y "save" 2 301541 perform-classic-updates-by-running-find-edit-then-save

--description--

En los buenos tiempos, esto era lo que había que hacer si se quería editar un documento, y poder utilizarlo de alguna manera (por ejemplo, enviándolo de vuelta en una respuesta del servidor). Mongoose tiene un método de actualización dedicado: Model.update(). Está vinculado al controlador de bajo nivel de mongo. Puedes editar en masa muchos documentos que coincidan con ciertos criterios, pero no envía de vuelta el documento actualizado, sólo un mensaje de "estado". Además, dificulta las validaciones de modelos, porque simplemente llama directamente al controlador mongo.

--instructions--

Modifica la función findEditThenSave para encontrar a una persona por _id (usa cualquiera de los métodos anteriores) con el parámetro personId como la clave de búsqueda. Añade "hamburger" a la lista de favoriteFoods (puedes usar Array.push()). Luego - dentro del callback de búsqueda: save() la Person actualizada.

Nota: Esto puede ser complicado, si está en tu esquema, declaraste favoriteFoods como un arreglo, sin especificar el tipo (por ejemplo [String]). En ese caso, favoriteFoods por defecto es de tipo Mixto, y tienes que marcarlo manualmente como editado usando document.markModified('edited-field'). Consulta la documentación de Mongoose

--hints--

"Find-edit-update" un elemento debe ser exitoso

(getUserInput) =>
  $.post(getUserInput('url') + '/_api/find-edit-save', {
    name: 'Poldo',
    age: 40,
    favoriteFoods: ['spaghetti']
  }).then(
    (data) => {
      assert.equal(data.name, 'Poldo', 'item.name is not what is expected');
      assert.equal(data.age, 40, 'item.age is not what expected');
      assert.deepEqual(
        data.favoriteFoods,
        ['spaghetti', 'hamburger'],
        'item.favoriteFoods is not what expected'
      );
      assert.equal(data.__v, 1, 'The item should be previously edited');
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

--solutions--

/**
  Backend challenges don't need solutions, 
  because they would need to be tested against a full working project. 
  Please check our contributing guidelines to learn more.
*/