2015-04-28 2 views
2

Как обновить элемент массива в схеме MongoDB. Я использую Mongoose для обработки манипуляций с данными.Пытается обновить MongoDB, используя Angular

поле в моей схеме я хочу изменить в настоящее время выглядит следующим образом:

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

Я работаю на имеющих пользователей подписаться на определенные события, которые они желают посетить. Пример схемы, приведенный выше, предназначен для хранения списка идентификаторов, связанных с каждым пользователем, подписавшимся на событие. Я думал, что только удостоверение личности имеет смысл, а не их полную информацию, если они решили изменить свое имя или другие свойства по дороге.

<span ng-click="registerUser(pickupleague._id)" class="btn" ng-hide="registered" data-ng-show="authentication.user"> 
    Register for Game 
</span> 

Код, указанный выше, предназначен для обработки события click для регистрации пользователя. Все работает так, как ожидалось.

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

Код, где я начинаю сталкиваться с некоторыми неприятностями. Журнал консоли показывает, что правильная информация была нацелена, по крайней мере, в течение этого сеанса, и данные выглядят так, как будто они были обновлены. Однако при обновлении страницы данные отсутствуют, и когда я использую терминал для проверки своих полей, данных нет.

Что еще делает цикл смешным. Я пытаюсь выполнить цикл и с идентификатором каждого пользователя запускать вызов, чтобы получить необходимую информацию.

$scope.getFirstName = function (id) { 
     console.log('Got here too! ID is: %s', id); 

     var players = Users.get({ 
      _id: id 
     }); 
    }; 

Код запускает журнал консоли без проблем, показывая, что был отправлен правильный идентификатор. Однако следующий блок кода заканчивается и бросает следующую ошибку.

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

Основываясь на том, что я прочитал, я уверен, что мне нужно, чтобы мои пользователи определены перед их загрузкой в ​​нг повтора, но я действительно не уверен.

Я также чувствую, что не могу правильно решить эту ошибку, пока не выясню, почему регистрация событий происходит только временно и не записывается в базу данных.

Любая помощь, которую я могу получить, будет очень признательна. Я пробовал на линии помощь, но я либо не сталкиваюсь с чем-либо, что имеет смысл для меня, или я чувствую, что это не соответствует моей ситуации.

Заранее благодарим за любую помощь, которую вы, ребята, могли бы предоставить.

Cheers, Эндрю

Обновлено с частичным ответом

Привет всем! Я смог понять часть этого, что было большой проблемой. Мне все же нужно выяснить мою ошибку цикла, но шаг за шагом.

Решение было следующим:

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

    }; 

Я не понимал, что толчок не писать в базу данных, и что мне нужно, чтобы запустить обновление впоследствии. Радости обучения! Надеюсь, это поможет кому-то еще столкнуться с проблемами.

ответ

1

Вы должны проверить элемент и посмотреть, что генерирует цикл. Я думаю, что может быть проблема с вашей функцией getFirstName. Он ничего не возвращает.

Edit:

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

фрагмент кода выше будет маршрут вы к этому месту. Я думаю, вы просто хотите нажать эти данные? Попробуйте изучить угловое обслуживание $http.

+0

Спасибо за ответ Swoogie. Оказывается, вышеизложенное только работало в определенной степени. Мне нужно было пересмотреть мою схему, поскольку я разрешил только одно поле, а не несколько. Я попытаюсь использовать метод http http, поскольку я разрабатываю ревизии схемы и сохраняю все опубликованные. –

Смежные вопросы