Как обновить элемент массива в схеме 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;
});
};
Я не понимал, что толчок не писать в базу данных, и что мне нужно, чтобы запустить обновление впоследствии. Радости обучения! Надеюсь, это поможет кому-то еще столкнуться с проблемами.
Спасибо за ответ Swoogie. Оказывается, вышеизложенное только работало в определенной степени. Мне нужно было пересмотреть мою схему, поскольку я разрешил только одно поле, а не несколько. Я попытаюсь использовать метод http http, поскольку я разрабатываю ревизии схемы и сохраняю все опубликованные. –