freeCodeCamp/curriculum/challenges/italian/05-back-end-development-and.../mongodb-and-mongoose/perform-classic-updates-by-...

2.5 KiB

id title challengeType forumTopicId dashedName
587d7fb8367417b2b2512c0e Eseguire classici aggiornamenti eseguendo Find, Edit e Save 2 301541 perform-classic-updates-by-running-find-edit-then-save

--description--

Nei bei tempi andati, questo era quello che dovevi fare se volevi modificare un documento, ed essere in grado di usarlo in qualche modo (ad esempio restituendolo in una risposta del server). Mongoose ha un metodo di aggiornamento dedicato: Model.update(). Esso è legato al driver di basso livello di mongo. Può modificare contemporaneamente più documenti che corrispondono a determinati criteri, ma non restituisce il documento aggiornato, solo un messaggio di 'stato'. Inoltre, rende difficile le validazioni del modello, perché chiama direttamente il driver di mongo.

--instructions--

Modifica la funzione findEditThenSave per trovare una persona in base al suo _id (utilizza uno qualsiasi dei metodi visti in precedenza) con il parametro personId come chiave di ricerca. Aggiungi "hamburger" alla lista dei favoriteFoods della persona (puoi usare Array.push()). Quindi - all'interno della callback find - salva (save()) la Person aggiornata.

Nota: Potrebbe essere complicato, se nel tuo Schema, hai dichiarato favoriteFoods come Array, senza specificare il tipo (cioè [String]). In questo caso, favoriteFoods prende di default il tipo misto, e devi contrassegnarlo manualmente come modificato utilizzando document.markModified('edited-field'). Vedi il nostro articolo su Mongoose.

--hints--

Il Find-edit-update di un elemento dovrebbe avere successo

(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.
*/