【发布时间】:2015-07-07 05:09:19
【问题描述】:
如何更新 MongoDB 架构中的数组元素。我正在使用 Mongoose 来帮助处理数据操作。
我要更改的架构中的字段当前如下所示:
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>
上面的代码被设置为处理用户注册的点击事件。这一切都按预期工作。
<ul>
<li ng-repeat="player in pickupleague.players">
<span>{{getFirstName(player)}}</span>
</li>
</ul>
现在这个循环什么都不返回。这就是我知道我的点击事件没有正确写入数据库的方式。它也会在一分钟内提供一些问题。
$scope.registerUser = function(id) {
var pickupleague = $scope.pickupleague;
$scope.registered = true;
pickupleague.players.push($scope.authentication.user._id);
console.log(pickupleague);
};
上面的代码是我开始遇到一些麻烦的地方。控制台日志显示至少在此会话中已针对正确的信息,并且数据看起来已更新。但是在页面刷新时数据丢失,当我使用终端检查我的字段时,没有数据。
更重要的是循环变得有趣。我尝试遍历并使用每个用户的 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 重复中,但我真的不确定。
我也觉得我无法正确解决这个错误,直到我弄清楚为什么事件注册只是暂时发生并且不写入数据库。
我能得到任何帮助将不胜感激。我一直在线寻求帮助,但要么没有遇到任何对我有意义的事情,要么我觉得它不适合我的情况。
提前感谢你们可能提供的任何帮助。
干杯, 安德鲁
更新了部分答案
大家好!我能够找出其中的一部分,这是一个大问题。我仍然需要弄清楚我的循环错误,但一步一步来。
解决方案如下:
$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 没有写入数据库并且我需要在之后运行更新。学习的乐趣!希望这会帮助遇到麻烦的其他人。
【问题讨论】:
标签: javascript angularjs node.js mongodb meanjs