AngularJS Mongollab$资源更新错误
我正在连接AngularJS和MongoLab,并试图更新“用户”集合 AngularJS资源服务:AngularJS Mongollab$资源更新错误,angularjs,mlab,Angularjs,Mlab,我正在连接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]
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对象?尝试将$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);
});
};
在传递给UsersService.update()时,更新/替换对象(“用户”)不应包含_id属性。Mongo不会替换_id值,因此更新后id将保持不变。
此函数中的另一个变化是,我们将用户id作为UsersService.update()函数的第一个参数传递,以便mongo知道要更新哪个文档。\u id由mongoDB保留,并且对于每个集合都必须是唯一的。它需要一个标识符。也许你需要提供它,或者至少不给它一个空对象?