2015-11-14 3 views
0

Используя стек MEAN, я пытаюсь обновить учетную запись администратора, в этом случае их название/роль на сайте. Проблема заключается в том, что единственной функцией, доступной при редактировании пользователя, является функция save(). Может быть, я могу использовать функцию обновления, и если это так, пожалуйста, дайте мне знать, но это не выглядит возможным:MongoDB - Save vs Update для определенных полей в документе

enter image description here

возникает проблема, когда пользователь будет сохранен, его создает новый документ и перезаписывает пароль пользователя и соль для некоторого значения. Я хотел бы иметь возможность вызвать функцию «обновления», которая будет обновлять только одно поле, но я не могу понять, как это сделать. Есть ли способ сделать это с помощью функции сохранения?

Соответствующий код:

exports.updateUserRoles = function(req, res) { 
    var currUser = req.body; 
    User.findById(currUser._id, function(err, user) { 
    //user.roles = currUser.roles; 
    user.save({ _id : '56467b28ba57d8d890242cfa', roles : 'admin' }); 

    //THE BELOW WAS A PREVIOUS ATTEMPT 

    /*user.save(function(err) { 
     if (err) { 
      return res.status(400).send({ 
       message: errorHandler.getErrorMessage(err) 
      }); 
     } else { 
      res.jsonp(user); 
      console.log('test2'); 
     } 
    });*/ 
}); 
}; 

Пытаясь что-то другое, что кажется очень близко, но до сих пор не совсем там еще.

Вот что я бегу:

exports.updateUserRoles = function(req, res) { 
    var currUser = req.body; 
    User.findById(currUser._id, function(err, user) { 
     //user.roles = currUser.roles; 
     //user.roles.set(0, 'admin'); 
     console.log('test'); 
     user.update(
      { _id: '56467b28ba57d8d890242cfa' }, 
      { 
       $set: { 
       roles: 'admin', 
       }, 
      } 
     ); 
     console.log('test2'); 
    }); 
}; 

После удара user.update линии, у нас есть пользователю в локальных переменных, видно:

enter image description here

user.update идет в этой функции Document.prototype.update, см.:

enter image description here

В арг смотреть строить права, которые _ID мы нацелены на то, что и действие, видно:

enter image description here

Но затем после запуска, ничего, кажется, меняется. Я очень взволнован.

ответ

0

Для обновлений различных полей в MongoDB можно использовать обновление с различными атомными операторами, как $ набора, $ снята с охраны, $ толкать и т.д. Пример:

var updateUserRoles = function(db, callback) { 
    db.collection('users').updateOne(
     { "_id", : "user_id", }, 
     { $set: { "password": "new_password" } }, 
     function(err, results) { 
     console.log(results); 
     callback(); 
     } 
    ); 
};