2014-01-24 3 views
0

Я связываю AngularJS с MongoLab и пытаюсь обновить коллекцию «пользователей».

AngularJS служба ресурс:

angular.module("myApp.services", ["ngResource"]) 
     .constant({ 
      DB_URL: "https://api.mongolab.com/api/1/databases/mydb/collections/users/:id", 
      API_KEY: "[SOME_RANDOM_KEY]" 
     }) 
     .factory("UsersService", ["$resource", "DB_URL", "API_KEY", function($resource, DB_URL, API_KEY) { 
      return $resource(DB_URL, { apiKey: API_KEY, id: "@_id.$oid" }, { update: { method: "PUT" }}); 
     }]); 

Это, как я пытаюсь обновить свою коллекцию пользователей:

angular.module("myApp", ["myApp.services"]) 
     .controller("AppController", ["$scope", "UsersService", function($scope, UsersService) { 
      $scope.users = [];    
      $scope.getAllUsers = function() { 
       $scope.users = UsersService.query(); 
      };    
      $scope.updateUser = function(user) { // user: firstName, lastName, email 
       //delete user._id; 
       UsersService.update({}, user, function() { 
        $scope.users = UsersService.query(); 
        console.log("Users updated successfully"); 
       }, function() { 
        console.log("Some problems updating the user", arguments); 
       }); 
      }; 
     }]); 

При попытке обновить информацию о пользователе, он вызывает исключение с указанием:

{ "message" : "cannot change _id of a document old:{ _id: ObjectId('[SOME_RANDOM_KEY]'), firstName: \"Anup\", lastName: \"Vasudeva\", email: \"[email protected]\" } new:{ _id: {}, firstName: \"Anup\", lastName: \"Vasudeva\", email: \"[email protected]\" }" 

Я новичок в MongoDB, поэтому я не понимаю, почему он создает пустую _ id для нового экземпляра пользователя?

+0

_id зарезервирован mongoDB и должен быть уникальным для каждой коллекции. Ему нужен идентификатор. Может быть, вам нужно предоставить его или, по крайней мере, не дать ему пустой объект? – Richard

ответ

1

Попробуйте изменить функцию $ scope.updateUser на следующее:

$scope.updateUser = function (user) { 
    var userId = user._id.$oid; 
    user._id = undefined; 
    UsersService.update({id: userId}, user, function() { 
    $scope.users = UsersService.query(); 
    console.log("Users updated successfully"); 
    }, function() { 
    console.log("Some problems updating the user", arguments); 
    }); 
}; 

Обновление/замена объекта ('пользователь'), не должна содержать свойство _id, когда передается в UsersService.update(). Mongo не заменит значение _id, поэтому после обновления будет оставаться неизменным. Еще одна вещь, которая была изменена в этой функции, заключается в том, что мы передаем идентификатор пользователя в качестве первого параметра функции UsersService.update(), чтобы mongo знал, какой документ обновить.

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