Мне нужно изменить тип данных нескольких полей в коллекции, поэтому я использовал следующее, чтобы сделать несколько изменений типа данных в коллекции документов. Ответьте на старый вопрос, но может быть полезным для других.
db.mycoll.find().forEach(function(obj) {
if (obj.hasOwnProperty('phone')) {
obj.phone = "" + obj.phone; // int or longint to string
}
if (obj.hasOwnProperty('field-name')) {
obj.field-name = new NumberInt(obj.field-name); //string to integer
}
if (obj.hasOwnProperty('cdate')) {
obj.cdate = new ISODate(obj.cdate); //string to Date
}
db.mycoll.save(obj);
});
Вот построчная разбивка:
$scope.checkout = function (cartObj) {
Создается переменная $ scope с именем checkout, которая ссылается на функцию, чтобы вы могли вызывать ее в представлении как checkout()
(например, от кнопки с ng-click = "оформить заказ").
Эта функция передается службе с именем cartObj.
var modalInstance = $modal.open({
Переменная modalInstance используется для вызова метода $ modal service open.
Модальная служба UI Bootstrap $ возвращает модальный экземпляр. Методу open передается объект, который определяет конфигурацию модального экземпляра следующим образом:
templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',
Это говорит о том, что модальному экземпляру следует использовать шаблон, найденный по соответствующему URL.
controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
}],
Это создает контроллер для модального экземпляра, которому передается $ scope, служба $ modalInstance и, что важно, разрешенная служба cartObj.
Сервисы - это синглтоны, которые используются для обмена данными между контроллерами. Это означает, что существует одна версия службы cartObj, и если один контроллер обновляет ее, другой контроллер может запросить службу и получить данные, которые были обновлены любым другим контроллером. Это замечательно, но если переменная должна быть инициализирована с некоторым значением из службы при загрузке контроллера, она вернет undefined, потому что сначала нужно запросить, а затем ждать, чтобы получить данные обратно. Вот где решается проблема:
resolve : { // This fires up before controller loads and templates rendered
cartObj : function() {
return cartObj;
}
}
});
Причина использования разрешения, вероятно, заключается в том, что сам шаблон зависит от того, какие данные из cartObj доступны, КОГДА шаблон загружается. Resolve разрешит обещания ДО того, как контроллер загрузится, поэтому, когда это произойдет, данные будут там и готовы. По сути, разрешение упрощает инициализацию модели внутри контроллера, поскольку исходные данные передаются контроллеру, а не контроллеру, который должен выходить и получать данные.
Разрешенный cartObj - это то, что передается в modalInstance и поэтому может быть доступно в контроллере как: cartObj. someproperty .