正在尝试使用 Angular 更新 MongoDB

Trying to update MongoDB using Angular

如何更新 MongoDB 架构中的数组元素。我正在使用 Mongoose 来帮助处理数据操作。

我想要更改的架构中的字段当前如下所示:

players: [
    { type : Schema.ObjectId, ref: 'User' }
],

我正在努力让用户订阅他们希望参加的某些活动。上面的模式示例旨在保存与已注册该事件的每个用户关联的 ID 列表。我认为只持有 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>

现在这个循环returns什么都没有。这就是我知道我的点击事件没有正确写入数据库的方式。它也会在一分钟内提供一些问题。

$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。然而,下一个代码块结束 运行ning 并抛出以下错误。

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []

根据我读过的内容,我很确定我需要先定义我的用户,然后再将它们加载到 ng repeat 中,但我真的不确定。

我也觉得我无法正确解决这个错误,直到我弄清楚为什么事件注册只是暂时发生而不写入数据库。

如果我能得到任何帮助,我将不胜感激。我一直在网上寻求帮助,但我要么没有遇到任何对我有意义的事情,要么我觉得它不适合我的情况。

在此先感谢你们可能提供的任何帮助。

干杯, 安德鲁

更新了部分答案

大家好!我能够弄清楚其中的一部分,这是一个大问题。我仍然需要找出我的循环错误,但一次一步。

解决方案如下:

$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;
        });

    };

我没有意识到推送没有写入数据库,之后我需要 运行 更新。学习的乐趣!希望这会帮助其他 运行 陷入麻烦的人。

您应该检查元素并查看循环生成的内容。我认为您的 getFirstName 函数可能有问题。它没有 return 任何东西。

编辑:

$location.path('pickupleagues/' + pickupleague._id);

上面的代码片段会将您带到这个位置。我想你只是想推送保存这些数据?尝试查看 $http Angular 服务。