Как обновить значение вложенного документа через mongoose? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь обновить значение вложенного документа с помощью запроса PUT.Он работает для значений в документе, но не в поддокументе.

const AnotherSchema = new Schema ({
    Name: String,
    Age: Number,
    Appearance: {
       Hair: String, Eyes: String, Height: Number}; 

Мой маршрут выглядит следующим образом

 router.put("/looks/:id/edit", function(req, res) {
    var Name= "blob"; 
    var Hair= "blue";
    AnotherSchema.findByIdAndUpdate(req.params.id, {Name, Hair}, function(err, feedback){
        if (err){
        res.send("error");
        } else {
        res.redirect("/looks");
        }
        });
    });

Этот маршрут работает для обновления имени, но не волос.Я попытался Appearance.Hair, но это выдает ошибку в консоли для неожиданного . Я также попытался [], () и {}, но ни один из них не делает трюк, ни делает " " иэта проблема, кажется, не появляется в документах.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы должны указывать пути через нотацию объекта к реквизиту, который хотите обновить:

router.put("/looks/:id/edit", function(req, res) {
  AnotherSchema.findByIdAndUpdate(req.params.id, {
    Name: "blob",
    Appearance: {
      Hair: "blue"
    }
  }, function(err, feedback) {
    if (err) {
      res.send("error");
    } else {
      res.redirect("/looks");
    }
  });
});

Выше findByIdAndUpdate эквивалентно:

{ $set: { Name: "blob", Appearance: { Hair: "blue" } } } согласно документам

0 голосов
/ 25 сентября 2018

Вы должны использовать оператор $set, в противном случае вы замените всю запись объектом, указанным в качестве аргумента.

var updateObj = {
  { $set: { Name: "blob", Appearance: { Hair: "blue" } } }
};

AnotherSchema.findByIdAndUpdate(req.params.id, updateObj, function (err, feedback) { ... });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...