2014-01-24 42 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保留,每个collection必须是唯一的,它需要一个标识符。也许你需要提供它,或者至少不要给它一个空的对象? – 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值,所以更新后id将保持不变。 这个函数中另外一个改变的地方是我们传递用户ID作为UsersService.update()函数的第一个参数,这样mongo就知道要更新哪个文档。