【问题标题】:AngularJS-MongoLab $resource update errorAngularJS-MongoLab $resource 更新错误
【发布时间】:2014-02-15 20:16:18
【问题描述】:

我正在将 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: \"anup.vasudeva@emal.com\" } new:{ _id: {}, firstName: \"Anup\", lastName: \"Vasudeva\", email: \"anup.vasudeva@email.com\" }"

我是 MongoDB 新手,所以我不明白它为什么要为新用户实例创建一个空的 _id 对象?

【问题讨论】:

  • _id 由 mongoDB 保留,对于每个集合必须是唯一的。它需要一个标识符。也许您需要提供它,或者至少不给它一个空对象?

标签: angularjs mlab


【解决方案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);
  });
};

更新/替换对象('user')在传递给 UsersService.update() 时不应包含 _id 属性。 Mongo 不会替换 _id 值,因此更新后 id 将保持不变。 在这个函数中改变的另一件事是我们将用户 ID 作为 UsersService.update() 函数的第一个参数传递,以便 mongo 知道要更新哪个文档。

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    相关资源
    最近更新 更多