Files
freeCodeCamp/curriculum/challenges/russian/05-apis-and-microservices/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.russian.md

3.8 KiB
Raw Blame History

id, title, challengeType, forumTopicId, localeTitle
id title challengeType forumTopicId localeTitle
587d7fb8367417b2b2512c0e Perform Classic Updates by Running Find, Edit, then Save 2 301541 «Выполните классические обновления, запустив Find, Edit, затем Save»

Description

В старые добрые времена это было то, что вам нужно было сделать, если вы хотите отредактировать документ и иметь возможность каким-либо образом его использовать, например, отправив его обратно в ответе сервера. У Mongoose есть специальный метод обновления: Model.update (). Он привязан к низкоуровневому драйверу монго. Он может массово редактировать многие документы, соответствующие определенным критериям, но он не отправляет обратно обновленный документ, только сообщение о статусе. Кроме того, это затрудняет проверку модели, потому что она просто вызывает драйвер Монго. Найдите человека по _id (используйте любой из вышеперечисленных методов) с параметром personId в качестве ключа поиска. Добавьте «гамбургер» в список ее любимых продуктов (вы можете использовать Array.push ()). Затем - внутри обратного вызова find - save () обновленный Person. [*] Подсказка: это может быть непросто, если в вашей Схеме вы объявили FavoritesFoods как Массив без указания типа (например, [String]). В этом случае по умолчанию в файле favourFoods используется смешанный тип, и вы должны вручную пометить его как отредактированный с помощью document.markModified ('edited-field'). (http://mongoosejs.com/docs/schematypes.html - # Смешанный)

Instructions

Find a person by \_id ( use any of the above methods ) with the parameter personId as search key. Add "hamburger" to the list of the person's favoriteFoods (you can use Array.push()). Then - inside the find callback - save() the updated Person.

Note: This may be tricky, if in your Schema, you declared favoriteFoods as an Array, without specifying the type (i.e. [String]). In that casefavoriteFoods defaults to Mixed type, and you have to manually mark it as edited using document.markModified('edited-field'). See Mongoose documentation

Tests

tests:
  - text: Find-edit-update an item should succeed
    testString: '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); })'