2016-01-27 2 views
0

Моего MongoDB базы данные основного документа выглядит следующим образом:Обновления подмассива объекта с Mongoose не работает

{ 
     "_id": { 
      "$oid": "568ad3db59b494d4284ac191" 
     }, 
     "name": "Myclass", 
     "items": [ 
      { 
      "name": "Conductive Gel", 
      "internal_id": "ID00067", 
      "description": "ECG Conductive Gel", 
      "short_description": "ECG Conduct. Gel", 
      "providers": [ 
       { 
       "name": "one", 
       "address": "" 
       }, 
       { 
       "name": "two", 
       "address": "" 
       } 
      ] 

      }, 
      { 

      } 
     ] 
    } 

Ok дело в том, что Я получаю путы вызова Ajax, который следует обновить один из пунктов (тот, который соответствует _id).

Мой подход:

exports.updateItem = function(req, res, next) { 


       classes.findOne({_id: '568ad3db59b494d4284ac19d'}, function(e,myclass){ 
        if(!e) { 

         myclass.items.forEach(function(item){ 
         if (item._id == req.body._id) { 

          item = req.body; 
          myclass.save(function(err, doc){ 


           if (err) return next(err); 
           return res.status(200).send('The item has been updated!'); 
          }); 
         }        
         }); 

        } else { 
         res.status(500).send('Class not folund in BBDD!!'); 
        } 
       }); 
}; 

Дело в том, что, когда я item = req.body; req.body информация не отображается в объект элемент мангустов и элемент в базе данных не обновляется. Я тоже не ошибаюсь.

Я проверил, что req.body и товар имеют одинаковые поля в тот момент, когда я делаю item = req.body;.

Если у меня есть item.name='whatever', с другой стороны, он работает.

Я боролся с этой проблемой в течение 4 часов теперь без решения ...

Я также попытался findOneAndUpdate Mongoose в() запрос без успеха ..

ответ

1

Если назначить item на новый вы фактически не изменяете содержимое массива. item - это просто ссылка на элемент в массиве.

Возможно, вы хотите отредактировать содержимое массива, объединив два объекта: item и req.body.

require('extend'); // npm install extend 
extend(item, req.body); 

Это фактически обновит значение в массиве, которое затем будет сохранено.

Однако, я рекомендую обновить поддокумент с помощью мангуста, как описано здесь: Mongoose find/update subdocument

+0

Ваше решение сработало! С другой стороны, я пробовал решение в вашей последней рекомендации и не работал. – Egidi

Смежные вопросы