Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用Angular更新MongoDB_Javascript_Angularjs_Node.js_Mongodb_Meanjs - Fatal编程技术网

Javascript 尝试使用Angular更新MongoDB

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

如何更新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>
上面的代码就是我开始遇到麻烦的地方。控制台日志显示,至少在此会话中已针对正确的信息,并且数据似乎已更新。然而,页面刷新时数据丢失,当我使用终端检查字段时,没有数据

更重要的是,循环变得有趣。我试着循环使用每个用户的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);