Javascript 尝试使用Angular更新MongoDB
如何更新MongoDB模式中的数组元素。我使用Mongoose来帮助处理数据操作 当前我要更改的架构中的字段如下所示:Javascript 尝试使用Angular更新MongoDB,javascript,angularjs,node.js,mongodb,meanjs,Javascript,Angularjs,Node.js,Mongodb,Meanjs,如何更新MongoDB模式中的数组元素。我使用Mongoose来帮助处理数据操作 当前我要更改的架构中的字段如下所示: players: [ { type : Schema.ObjectId, ref: 'User' } ], 我正在让用户订阅他们希望参加的某些活动。上面的模式示例用于保存与已注册事件的每个用户相关联的ID列表。我认为仅仅持有身份证是有意义的,而不是他们的全部信息,以防他们决定改变自己的名字或其他财产 <span ng-click="registerUser(pi
players: [
{ type : Schema.ObjectId, ref: 'User' }
],
我正在让用户订阅他们希望参加的某些活动。上面的模式示例用于保存与已注册事件的每个用户相关联的ID列表。我认为仅仅持有身份证是有意义的,而不是他们的全部信息,以防他们决定改变自己的名字或其他财产
<span ng-click="registerUser(pickupleague._id)" class="btn" ng-hide="registered" data-ng-show="authentication.user">
Register for Game
</span>
上面的代码就是我开始遇到麻烦的地方。控制台日志显示,至少在此会话中已针对正确的信息,并且数据似乎已更新。然而,页面刷新时数据丢失,当我使用终端检查字段时,没有数据
更重要的是,循环变得有趣。我试着循环使用每个用户的id运行一个调用以获取所需的信息
$scope.getFirstName = function (id) {
console.log('Got here too! ID is: %s', id);
var players = Users.get({
_id: id
});
};
代码运行控制台日志没有问题,表明传递了正确的ID。但是,下一个代码块最终运行并抛出以下错误
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
根据我读到的内容,我非常确定在将用户加载到ng repeat之前需要定义他们,但我真的不确定
我还觉得,在我弄明白为什么事件注册只是暂时发生而不写入数据库之前,我无法正确处理这个bug
如果我能得到任何帮助,我将不胜感激。我一直在寻求帮助,但我要么没有发现任何对我有意义的东西,要么我觉得它不适合我的情况
提前感谢你们可能提供的任何帮助
干杯,
安德鲁
更新部分答案
大家好!我能够找出其中的一部分,这是一个大问题。我仍然需要找出我的循环错误,但一步一个脚印
解决办法如下:
$scope.registerUser = function(id) {
$scope.registered = true;
$scope.pickupleague.players.push($scope.authentication.user._id);
$scope.pickupleague.$update(function() {
$location.path('pickupleagues/' + pickupleague._id);
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
我没有意识到push没有写入数据库,我需要在之后运行更新。学习的乐趣!希望这能帮助其他遇到麻烦的人。您应该检查元素并查看循环生成的内容。我认为getFirstName函数可能有问题。它不会返回任何东西 编辑:
$location.path('pickupleagues/' + pickupleague._id);
上面的代码片段会将您路由到此位置。我想你只是想保存这些数据?尝试查看角度服务。谢谢您的回复。事实证明,上述方法只在一定程度上有效。我需要修改我的模式,因为我只允许更新一个字段而不是多个字段。我将尝试$http方法,为模式进行修订,并让每个人都知道。
$scope.registerUser = function(id) {
$scope.registered = true;
$scope.pickupleague.players.push($scope.authentication.user._id);
$scope.pickupleague.$update(function() {
$location.path('pickupleagues/' + pickupleague._id);
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
$location.path('pickupleagues/' + pickupleague._id);